Struts1 では, Action に相当するクラスと, データであるBean をActionFormのimplements で実装し, struts-config.xml に<form-bean>として定義しました。
Struts2 では, ActionSupport の拡張クラスつまり, Actionの中に, Beanも定義できました。
しかし, データとActionは別のクラスとして, 実装しておいた方が, 見やすいといったこともあるでしょう。
Struts2のWebページには, そのようなサンプルがのっています。それを動作サンプルとして構成してみました。
簡単なフォルダ構成です
- Struts2Sample
| - web
| | - nameform.jsp : 入力用フォーム
| - WEB-INF
| - classes
| | - struts.xml
| - jsp
| - person.jsp : 結果の表示
ソースファイルなどのパスは省略
PersonAction.java : Action用
Person.java : Form の Bean用
用意するもの
- 設定ファイル
- Actionクラス
- Bean(Formのデータを入れる)
- 入力フォーム JSP
- 結果の出力 JSP
●設定ファイル struts.xml Action の登録をします
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts SYSTEM "http://struts.apache.org/dtds/struts-2.0.dtd" PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN">
<struts>
<package name="default" extends="struts-default">
<action name="registerbean" class="com.atmarkplant.struts2.action.PersonAction"> <result name="success">/WEB-INF/jsp/person.jsp</result>
</action>
</package>
</struts>
●Action(PersonAction.java)
ActionSupport を拡張します。 PersonクラスというBeanのインスタンスを
入れておきます。変数はこれだけです。getter/setterも用意します。
package com.atmarkplant.struts2.action;
import com.atmarkplant.struts2.bean.Person;
import com.opensymphony.xwork2.ActionSupport;
public class PersonAction extends ActionSupport
{
private Person personBean;
@Override
public String execute() throws Exception
{
return "success";
}
public Person getPersonBean()
{
return personBean;
}
public void setPersonBean(Person personBean)
{
this.personBean = personBean;
}
}
● Bean (Person.java)
必要なデータをここで定義します。Formから得られる値を格納するためのものです
ここでもgetter/setterを用意しました。
package com.atmarkplant.struts2.bean;
import java.io.Serializable;
public class Person implements Serializable
{
private static final long serialVersionUID = -4873617641500115092L;
private String firstName;
private String lastName;
private String email;
private int age;
public String getFirstName()
{
return firstName;
}
public void setFirstName(String firstName)
{
this.firstName = firstName;
}
public String getLastName()
{
return lastName;
}
public void setLastName(String lastName)
{
this.lastName = lastName;
}
public String getEmail()
{
return email;
}
public void setEmail(String email)
{
this.email = email;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public String toString()
{
return "First Name: " + getFirstName() + " Last Name: " + getLastName() +
" Email: " + getEmail() + " Age: " + getAge();
}
}
●入力フォーム JSP(nameform.jsp)
普通のJSPです。ただし, name 属性のところにActionで使う変数名.Beanのフィールド名
という形でいれておきます。これでForm に値をいれて, Actionに飛ばすと, Actionの中のBean
のフィールドに1つ1つ入っていくわけです。(もちろん型を合わせなければなりません)
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Register</title>
</head>
<body>
<h1>Register for a prize by completing this form</h1>
<s:form action="registerbean">
<s:textfield name="personBean.firstName" label="First name" />
<s:textfield name="personBean.lastName" label="Last name" />
<s:textfield name="personBean.email" label="Email" />
<s:textfield name="personBean.age" label="Age" />
<s:submit value="Submit"/>
</s:form>
</body>
</html>
● 結果の出力 JSP(person.jsp)
<s:property> タグで取り出します。Actionで定義した名前でそのまま出力されます
(toString()のoverrideをしたので, それが表示されます)
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Person Results</title>
</head>
<body>
<h1>Thank you for registering for a prize.</h1>
<p>Your registration information: <s:property value="personBean" /></p>
</body>
</html>
※このように, Formで得られた値をBean へ放り込むことができます。
0 件のコメント:
コメントを投稿