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としている。
リスト8■Strutsの画面遷移の設定 |
<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というファイルを作成する。
リスト9■Struts設定ファイル、<message-resources> の設定例 |
<message-resources parameter="resources.application"/> |
Strutsでは、クライアントからの入力値妥当性検査の仕組みとして、Validator機能が用意されている。
検査のルールは、未入力検査、文字列長検査、書式の検査など、標準で18種類(非推奨を含めると20種類)が用意されている。標準で用意されているルールのみで要件を満たすことができなければ、ルールを自作することも可能だ。StrutsのValidatorは、すべて設定ファイルベースで検査の設定を行うのが特徴なのだ。
設定ファイルに検査ルールを登録し、フォームとプロパティ、そしてルールそれぞれの適用を設定する。設定ファイルによる一元管理と、ルールの修正、追加などの際にアプリケーションのソースコードに手を入れる必要がないのがメリットといえる。リスト10は、WelcomeFormのuserNameというプロパティに、未入力検査のルール"required"と、最大文字列長検査のルール"maxlength"を適用した設定例だ。
リスト10■Validatorの検証適用設定ファイルの設定例 |
<!--"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> 要素を設定する。
リスト11■web.xmlの作成例 |
<?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の実装例だ。
リスト12■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としている。
リスト13■BackingBeanの登録例 |
<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.