Beanはただ値を格納するだけに利用する場合は、自動でアクションフォームを作成してもらいましょう。アクセサメソッドを書く手間が省けます。
ファイル構成
action要素でvalidate属性をfalseにしないと何故かエラーになってしまいます。デフォルトはtrueみたいですね。
<!-- struts-config.xml -->
<?xml version="1.0" encoding="ISO-8859-1" ?>
<struts-config>
<form-beans>
<form-bean name="autoBean" type="org.apache.struts.validator.DynaValidatorActionForm">
<form-property name="name1" type="java.lang.String"></form-property>
<form-property name="name2" type="java.lang.String"></form-property>
<form-property name="name3" type="java.lang.String"></form-property>
</form-bean>
</form-beans>
<action-mappings>
<action path="/Input" forward="/pages/Input.jsp">
</action>
<action path="/Output" type="HelloAction" name="autoBean" validate="false">
<forward name="success" path="/pages/Output.jsp"></forward>
</action>
</action-mappings>
</struts-config>
// アクションクラス
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
public class HelloAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
DynaActionForm dynaForm = (DynaActionForm) form;
String name1 = dynaForm.get("name1").toString();
dynaForm.set("name1", "Mr." + name1);
dynaForm.set("name3","名無し");
return mapping.findForward("success");
}
}
<%-- 入力画面 --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<html:html>
<html:base/>
<h1><%=request.getRequestURI()%></h1>
<html:form action="/Output.do">
名前1:<html:text property="name1">
名前2:<html:text property="name2">
名前3:<html:text property="name3">
<html:submit>
</html:submit></html:text></html:text></html:text></html:form>
</html:html>
<%-- 出力画面 --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<html:html>
<html:base/>
<h1><%=request.getRequestURI()%></h1>
<p>
<bean:write name="autoBean" property="name1">さんと、
<bean:write name="autoBean" property="name2">さんと、そして、
<bean:write name="autoBean" property="name3">さん、おめでとうございます!
</bean:write></bean:write></bean:write></p>
</html:html>
実験開始
入力画面では3つ目の値は空にしておいてもエラーにならないことを確かめます。
アクションクラスで名前1に「Mr.」をつけて、名前3には「名無し」をセットします。
DynaActionFormにて値の受け渡しができることが確認できました。今回は悪書フォームを自分で記述していないので、reset()でリクエストのエンコーディングを設定できません。そのためinputフィールドで日本語を使用すると文字化けします。しかし、アクションクラスでセットした値は大丈夫でした。jsp側のcharsetで対応出来るみたいです。