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>
