Strutsの画面遷移は、Struts設定ファイルの <action-mappings> 要素で行う。キーとなるのは、リクエストパスだ。
どのようなリクエストパスが要求された場合に、どのActionFormを使い、どのActionを実行し、そしてどのパスに遷移するのかを設定する。このリクエストパスは、クライアントからのリクエストがフォームのsubmitである場合、html:formタグのaction属性の値と一致する。
リスト8は、リクエストパス"/input"が入力要求された場合に処理される。入力値を保持するActioFormに登録名"WelcomeForm"というActionFormを使うと、study.struts.action.WelcomeAction クラスのexecute()メソッドが実行され、このexecute()メソッドから"success"という名称で登録されたActionForwardが返された場合、"/welcome.jsp"にフォワードする設定例だ。
この設定例ではActionFormのスコープはrequestとしている。
<action-mappings> <action path="/input" name="WelcomeForm" scope="request" type="study.struts.action.WelcomeAction" > <forward name="success" path="/welcome.jsp" /> </action> </action-mappings>
Strutsでは、エラー時に表示するメッセージなどをメッセージリソースファイルという、外部プロパティファイルに記述する。ファイル名とデプロイ場所はStruts設定ファイルの <message-resources> 要素にparameter属性で指定するのだ(この値に拡張子.propertiesを付加してファイル作成)。
値をドットで区切ると、パッケージツリーと同じ扱いになるので、リスト9のように設定した場合は、パッケージツリーのresourcesディレクトリに、application.propertiesというファイルを作成する。
<message-resources parameter="resources.application"/>
Strutsでは、クライアントからの入力値妥当性検査の仕組みとして、Validator機能が用意されている。
検査のルールは、未入力検査、文字列長検査、書式の検査など、標準で18種類(非推奨を含めると20種類)が用意されている。標準で用意されているルールのみで要件を満たすことができなければ、ルールを自作することも可能だ。StrutsのValidatorは、すべて設定ファイルベースで検査の設定を行うのが特徴なのだ。
設定ファイルに検査ルールを登録し、フォームとプロパティ、そしてルールそれぞれの適用を設定する。設定ファイルによる一元管理と、ルールの修正、追加などの際にアプリケーションのソースコードに手を入れる必要がないのがメリットといえる。リスト10は、WelcomeFormのuserNameというプロパティに、未入力検査のルール"required"と、最大文字列長検査のルール"maxlength"を適用した設定例だ。
<!--"charset=ISO-2022-JP"-->
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE form-validation PUBLIC
"-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.1.3//EN"
"http://jakarta.apache.org/commons/dtds/validator_1_1_3.dtd">
<form-validation>
<global />
<formset>
<form name="WelcomeForm">
<field property="userName" depends="required,maxlength">
<arg0 key="inputForm.userName" />
<arg1 key="${var:maxlength}" resource="false" />
<var>
<var-name>maxlength</var-name>
<var-value>64</var-value>
</var>
</field>
</form>
</formset>
</form-validation>
JSFもまた、Strutsと同様にクライアントからのリクエストはひとつのServletで処理するアーキテクチャを採用している。web.xmlにjavax.faces.webapp.FacesServletをFaces ServletというServlet名で登録し、URLパターン /faces/* を設定するのが一般的だ。FacesServletも、StrutsのActionServletと同様にコンテナ起動時に初期化されるよう、<load-on-startup> 要素を設定する。
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <filter> <filter-name>Set Character Encoding</filter-name> <filter-class>filters.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>Windows-31J</param-value> </init-param> </filter> <filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- Standard Faces Servlet Configuration --> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!-- Standard Faces Servlet Mapping --> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> <!-- The Usual Welcome File List --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- JSF Tag Library Descriptors --> <taglib> <taglib-uri>/tags/jsf-html</taglib-uri> <taglib-location>/WEB-INF/tld/html_basic.tld</taglib-location> </taglib> <taglib> <taglib-uri>/tags/jsf-core</taglib-uri> <taglib-location>/WEB-INF/tld/jsf_core.tld</taglib-location> </taglib> </web-app>
リスト11の作成例では、そのほかにfiterの登録、設定とウェルカムファイルリストの登録、カスタムタグのための <taglib> 要素の設定が行われている。
JSFでは、クライアントで入力された値はUIコンポーネントで保持し、BackingBeanと呼ばれるJavaBeansに値がコピーされる。リクエストパラメータは基本的に文字列型だが、BackingBean のプロパティを数値型や日付型等で作成した場合、コピーされる時に数値型や日付型など、任意の型へ変換させることができる。
BackingBeanの作成方法は、通常のJavaBeansと変わらない。リスト12は、userName という java.lang.String 型のプロパティを持ったBackingBeanの実装例だ。
package study.jsf.bean;
import java.io.Serializable;
public class WelcomeBean implements Serializable {
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
作成したら、faces-config.xml の <managed-bean> 要素に名前を付けて登録する。JSFでは、このBeanのスコープもここで設定する。リスト13は、WelcomeBean という名前で登録した実装例だ。スコープはrequestとしている。
<managed-bean> <managed-bean-name>WelcomeBean</managed-bean-name> <managed-bean-class>study.jsf.bean.WelcomeBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean>
Copyright © ITmedia, Inc. All Rights Reserved.