LoginSignup
2
1

More than 5 years have passed since last update.

アクセサメソッドを書く手間が省けるDynaActionFormを使ってみた

Posted at

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>&lt;%=request.getRequestURI()%&gt;</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>&lt;%=request.getRequestURI()%&gt;</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つ目の値は空にしておいてもエラーにならないことを確かめます。

struts_01_141010.jpg

アクションクラスで名前1に「Mr.」をつけて、名前3には「名無し」をセットします。

struts_02_141010.jpg

DynaActionFormにて値の受け渡しができることが確認できました。今回は悪書フォームを自分で記述していないので、reset()でリクエストのエンコーディングを設定できません。そのためinputフィールドで日本語を使用すると文字化けします。しかし、アクションクラスでセットした値は大丈夫でした。jsp側のcharsetで対応出来るみたいです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1