naobe @ ウィキ
Struts1
最終更新:
Bot(ページ名リンク)
-
view
Strutsに戻る
Struts1.XXについて記述する。
【参照サイト】
http://www.fk.urban.ne.jp/home/kishida/kouza/struts.html
http://struts.apache.org/1.3.10/userGuide/index.html
【参照サイト】
http://www.fk.urban.ne.jp/home/kishida/kouza/struts.html
http://struts.apache.org/1.3.10/userGuide/index.html
ダウンロード
カスタムタグ
htmlタグ
radio
Strutsの<html:radio>タグにはcheckedという属性がない。。 そんなわけで、チェックは、<html:radio>タグを含んだ <html:form />に関連付けられたActionForm Beanのラジオボタンの プロパティにチェックをつけたい値をセットします。 例) <html:radio property="id" value="1" /> <html:radio property="id" value="2" /> <html:radio property="id" value="3" /> と定義していて、valueが1のラジオボタンにチェックを付けたい場合 ActionForm Beanのプロパティ”id”に”1”をセットしておくと <input type="radio" name="id" value="1" checked="checked"> <input type="radio" name="id" value="2"> <input type="radio" name="id" value="3"> と、[[HTML]]のコードが生成されます。 【例】 <jsp:setProperty name="menuForm" property="kubun" value="shusiHyouji"/> --> menuFormは、struts-config.xmlで定義。 <tr> <td><html:radio property="kubun" value="nyuuryoku"/></td><td>入力</td> <td></td> </tr> <tr> <td><html:radio property="kubun" value="shusiSettei"/></td><td>収支項目設定</td> <td></td> </tr> <tr> <td><html:radio property="kubun" value="shosaiSettei"/></td><td>収支項目詳細設定</td> <td></td> </tr> <tr> <td><html:radio property="kubun" value="shusiHyouji"/></td><td>収支表示</td> <td>
簡単なアプリケーション
初期画面
regist.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %> <html:html> <head><title>追加</title></head> <body> <h1>追加</h1> <html:form action="/registWord"> 英語:<html:text property="english"/><br> 日本語:<html:text property="japanese"/><br> <html:submit property="submit" value="追加"/> </html:form> </body> </html:html>
ライブラリ
以下のファイルをWEB-INF/libにコピー
- antlr-2.7.2.jar
- commons-beanutils-1.8.0
- commons-chain-1.2.jar
- commons-digester-1.8.jar
- commons-logging-1.0.4.jar
- commons-validator-1.3.1.jar
- oro-2.0.8.jar
- log4j-1.2.13.jar
- struts-core-1.3.10.jar
- struts-taglib-1.3.10.jar
- struts-tiles-1.3.10.jar
ActionForm継承クラスの作成
画面の入力をBeanにまとめたクラスを作成。以下にregist.jspの入力をBeanにしたクラスを示す。
Beanのプロパティにregist.jspのプロパティ(HTMLのときのname)が設定されていることがわかる。
Beanのプロパティにregist.jspのプロパティ(HTMLのときのname)が設定されていることがわかる。
package suna; import org.apache.struts.action.ActionForm; public class WordForm extends ActionForm { /** シリアルバージョンID */ private static final long serialVersionUID = 7580324238159300357L; private String english; private String japanese; public String getEnglish() { return english; } public void setEnglish(String english) { this.english = english; } public String getJapanese() { return japanese; } public void setJapanese(String japanese) { this.japanese = japanese; } }
Action継承クラスの作成
リクエストを受けて、処理し、JSPへ転送するクラス。
package suna; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.impl.Log4jFactory; import org.apache.log4j.Logger; import org.apache.log4j.spi.LoggerFactory; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; public class RegistWordAction extends Action { Logger logger = Logger.getLogger(RegistWordAction.class); public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { WordForm wf = (WordForm)form; String eng = wf.getEnglish(); String jap = wf.getJapanese(); logger.info("eng : " + eng); logger.info("jap : " + jap); return mapping.findForward("success"); } }
【注意】eclipse - tomcatでは、log4jのログファイルは、eclipseインストールディレクトリからの相対パスになる。
設定ファイル
【WEB-INF/struts-config.xml】
画面遷移を設定する。
画面遷移を設定する。
<?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="wordForm" type="suna.WordForm" /> </form-beans> <action-mappings> <!-- /registWord.doを指定したときは、suna.RegistWordActionを実行する --> <!-- リクエストを表すビーンは、wordForm(suna.WordForm)になる --> <action path="/registWord" type="suna.RegistWordAction" name="wordForm" scope="request"> <!-- Actionクラスからsuccessが返ったときは、registfinish.jspにフォワードする --> <forward name="success" path="/registfinish.jsp" /> </action> </action-mappings> </struts-config>
【WEB-INF/web.xml】
servletタグと、servlet-mappingタグにstruts専用の設定を追加する。
servletタグと、servlet-mappingタグにstruts専用の設定を追加する。
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> ・ ・ ・ <!-- Standard Action Servlet Configuration --> <servlet> <servlet-name>action</servlet-name> <servlet-class> org.apache.struts.action.ActionServlet </servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/struts-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- Standard Action Servlet Mapping --> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
バリデータ
設定ファイルのみで、入力チェックを可能にする。
- ValidatorFormを継承したActionFormクラスを作成する
- JSPには、クライアントサイドでのチェックを行うには<html:javascript formName="フォーム名" />を含む。
- バリデーションルールをXMLファイルに記述する
設定
strus-config.xml
- 最後に、下記にしめすようにstruts-config.xmlの中にバリデータプラグインを設定する
<plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/org/apache/struts/validator/validator-rules.xml, /WEB-INF/validation.xml"/> </plug-in>
validation.xmlは、ルール設定ファイル、validation-rules.xmlはルール設定のメタファイル(ルール自体の定義、validation.xmlに設定する値の定義)。validation-rules.xmlは、struts-core-1.X.jarの中にある。
validation.xml
- 入力チェックルールを設定する。form、field要素で、チェックするフォームフィールドを決定する。
- field要素のdepends属性で、フィールドに対してチェックするルールを列挙する。ルールは、validation-rules.xmlに設定されているものを設定する
- msg要素は、固有のメッセージキーを使用する場合に使う。デフォルトのメッセージキーは、validation-rules.xmlのvalidator要素のmsg属性に設定されたものになる。
- arg要素は、メッセージのプレースフォルダを設定する。key属性は、デフォルトではリソースバンドルのキーになる。resource属性をfalseに設定すると、keyの値が、プレースフォルダになる。
- key属性に${var:変数名}を設定すると、変数値が返る。
<form-validation> <formset> <form name="inputForm"> <field property="kingaku" depends="required,integer,maxlength"> <msg name="required" key="inputForm.kingaku.001" /> <msg name="integer" key="inputForm.kingaku.002" /> <msg name="maxlength" key="inputForm.kingaku.003" /> <arg name="maxlength" key="${var:maxlength}" resource="false" position="0"/> <var> <var-name>maxlength</var-name> <var-value>7</var-value> </var> </field> </form> </formset> </form-validation>
入力エラーがあったときの画面遷移の追加
struts-confix.xmlのaction要素にinput属性を追加。
:例: <struts-config> ... <action-mappings> <action path="/sample/productInput" type="sample.ProductInputAction" name="productForm" scope="request" input="/sample/productInput.jsp"> </action> </action-mappings> </struts-config>
注釈)プリミティブタイプのフォームプロパティを扱うときはアクションサーブレットのconvertNull initパラメータをtrueに設定する。これらの値はデフォルトが0であるため、設定しないときは失敗に終わる。
任意のタイミングで、validateするには
DBへのデータ入力を行わず単に他の画面に遷移する場合は、入力チェックは不要。しかしstrutsのデフォルトのvalidationでは、Actionクラスが動作する前にvalidateしてしまい問題。よってActionクラスの中でのvalidate実行を試みる。
struts-config.xml
validateしない設定にする。
【例】
【例】
<action path="/inputExec" type="suna.screen.kakeibo.input.InputAction" name="inputForm" scope="request" validate="false">
Actionクラス修正
Actionform#validate()を実行して、requestのorg.apache.struts.Globals.Globals.ERROR_KEYに戻り値を設定する。
struts-config.xmlにエラー用の画面遷移も追加する。
struts-config.xmlにエラー用の画面遷移も追加する。
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { InputForm inputForm = (InputForm) form; //実行ボタン押下 if(InputForm.EXEC.equals(inputForm.getEventId())) { // 入力チェック ActionErrors errors = inputForm.validate(mapping, request); if(errors != null && errors.get().hasNext()) { // エラーメッセージがあれば、終了 request.setAttribute(Globals.ERROR_KEY, errors); // エラーが発生したときの結果コード resultCode = InputForm.SHUSI_INPUT_GAMEN; } } ・ ・ return mapping.findForward(resultCode); }
フォームのプロパティをエラーメッセージに表示するには
Validatorのuserguideを見ると、メッセージの引数には、リソースのキーかvalidation.xmlに設定したvarしか出力できない。
例外処理
struts-config.xmlに以下のタグを追加。
<global-exceptions> <exception type="例外クラス" key="メッセージID" path="遷移先のパス" /> </global-exceptions>
keyは、<message-resources parameter="resource.message" />に設定したメッセージID
【記述例】
<global-exceptions> <exception type="java.lang.Exception" key="message1" path="WEB-INF/jsp/Error.jsp" /> </global-exceptions>