トップページ >  Struts >  DynaActionForm
初版2008/02/06 最終更新日2008/02/06
  DynaActionForm
目次
DynaActionForm
struts-configの例
Actionクラスの例
DynaActionForm
DynaActionFormとは、org.apache.struts.action.DynaActionFormクラスのことで、アクションフォームを作成せずにフォームの値を取得できるクラスです。
DynaActionFormクラスはstruts-core-1.3.10.jarに格納されています。
以下のようなJSPがあるとします。

<%@ page contentType="text/html; charset=Windows-31J" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>

<html:html>
  <head>
    <title>サンプルログイン</title>
    <meta http-equiv="Content-Type" 
                  content="text/html; charset=Windows-31J">
  </head>
<body>

<html:form action="/LoginAction">
  Login画面<br ><br >
  <html:text property="id" size="10" maxlength="8" />
  <html:text property="password" size="10" maxlength="8" />
  <html:submit property="submit" value="実行"/>
</html:form>
</body>
</html:html>

struts-configの例
以下はstruts-config内でDynaActionFormを設定する例です。
name属性はフォームとアクションを関連付けるためです。
DynaActionFormの場合は、type属性の値は以下の通り固定org.apache.struts.action.DynaActionFormです。
正し、DynaActionFormを継承したフォームを作成している場合やDynaValidatorFormの場合は、そのパスを指定します。
form-propertyがアクションフォームの代わりになります。このプロパティとJSPのプロパティのname属性が合っていないとエラーとなります。
また、name属性,type属性は必須です。initial値には初期値が設定できます。
但し、フォーム内に同じnameのテキストフィールドなどが存在する場合はその値が優先されます。

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE struts-config PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
        "http://struts.apache.org/dtds/struts-config_1_3.dtd">

<struts-config>
  <form-beans>
    <form-bean name="test_form" type="org.apache.struts.action.DynaActionForm">
      <form-property name="id" type="java.lang.String" initial="id" />
      <form-property name="password" type="java.lang.String" initial="pass" />
    </form-bean>
  </form-beans>

  <action-mappings>
    <action path="/sample_form"
      type="jp.co.confrage.action.TestDynaLoginAction"
     name="test_form"
     scope="request">
    <forward name="success" path="/WEB-INF/pages/login.jsp" />
  </action>
</action-mappings>

<message-resources parameter="MessageResources"/>

</struts-config>


Actionクラスの例
以下、Actionクラスの例です。
引数のActionFormをDynaActionFormでキャストして受け取ります。
DynaActionFormクラスにはgetメソッドが用意されていますのでそれを使用します。戻り値はObjectになるのでキャストする必要があります。

package jp.co.confrage.action;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jp.co.confrage.form.LoginForm;

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 TestDynaLoginAction extends Action {

    public ActionForward execute(ActionMapping mapping, ActionForm _form,
            HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {

    	DynaActionForm form = (DynaActionForm)_form;
    	
    	String id = (String)form.get("id");
    	String pass = (String)form.get("password");
    	
        return mapping.findForward("success");
    }

}

ログイン画面


struts-config.xmlで指定したforward先のJSPファイルでidとpasswordを表示しています。
struts-config.xmlのname属性とpropertyをマッピングしてbean:writeで表示しているだけです。

<%@ page contentType="text/html; charset=Windows-31J" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>

<html:html>
  <head>
    <title>ポータルサイト</title>
    <meta http-equiv="Content-Type" 
                  content="text/html; charset=Windows-31J">
  </head>
<body>

<bean:write name="test_form" property="id" />
<bean:write name="test_form" property="password" />

</body>
</html:html>

実行ボタンを押すと以下のような画面が表示されます。

ログイン先の画面