解答例 - 実習課題3 - 14.validation.xmlの設定
(実習課題3)
Strutsを用いて、以下のWebアプリケーションを作成しなさい。
- 商品を発注するWebアプリケーション。発注する商品を入力するページと、確認するページだけで良い。
- 入力する情報は、商品コードと数量の2つ。10商品まで入力できるようにすること。
- フォーム全体に対応するActionFormと、商品1つ1つに対応するJavaBeanで入力値を管理すること。
- 商品コードと数量に関する入力条件は以下の通り。入力値のチェックには、validatorの機能を用いること。
- 商品コードは、英数字5桁。
- 商品コードが入力された場合には、数量も入力されなければならない。
- 数量は、1以上100以下の数字。
- 確認ページでは、入力された情報、商品コードと数量だけで良い。
- indexedListPropertyを使用しての検証における制約を確認すること。
解答例
▼ディレクトリ構成は以下の通り
. └─WEB-INF web.xml(13章 実習課題5と同じ),struts-config.xml,validation.xml, │ validator-rules.xml(Strutsで提供されているものそのまま) ├─classes │ └─com │ └─techscore │ └─struts EncodingFilter.class(2章 実習課題2と同じ), │ │ MessageResources.properties │ └─chapter14 │ └─exercise3 OrderForm.java,Item.java ├─JSP │ └─com │ └─techscore │ └─struts │ └─chapter14 │ └─exercise3 input.jsp,output.jsp ├─lib strutsライブラリjarファイル └─tld struts-html.tld,struts-nested.tld,struts-logic.tld ※strutsライブラリjarファイル struts.jar,commons-beanutils.jar,commons-collections.jar,commons-digester.jar,commons-logging.jar, commons-validator.jar,jakarta-oro.jar
/** * Item.java TECHSCORE Java JakartaStruts 14章 実習課題3 * * Copyright (c) 2004 Four-Dimensional Data, Inc. * */ package com.techscore.struts.chapter14.exercise3; public class Item { private String productCode=""; private String amount=""; public String getAmount() { return amount; } public String getProductCode() { return productCode; } public void setAmount(String amount) { this.amount = amount; } public void setProductCode(String productCode) { this.productCode = productCode; } }
/** * OrderForm.java TECHSCORE Java JakartaStruts 14章 実習課題3 * * Copyright (c) 2004 Four-Dimensional Data, Inc. * */ package com.techscore.struts.chapter14.exercise3; import org.apache.struts.validator.ValidatorForm; public class OrderForm extends ValidatorForm { private Item[] items = new Item[10]; public OrderForm() { for (int i = 0; i < items.length; i++) { items[i] = new Item(); } } public Item getItem(int index) { return items[index]; } public void setItem(int index, Item item) { this.items[index] = item; } public Item[] getItems() { return items; } }
<!-- input.jsp --> <!-- TECHSCORE Java JakartaStruts 14章 実習課題3 --> <!-- Copyright (c) 2004 Four-Dimensional Data, Inc. --> <%@ page contentType="text/html; charset=Windows-31J" session="false" pageEncoding="Windows-31J" import="com.techscore.struts.chapter14.exercise3.Item" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-nested" prefix="nested" %> <html> <head><title>TECHSCORE Java JakartaStruts 14章 実習課題3</title></head> <body> <h2>注文商品の入力</h2> <p>注文する商品の商品コードと数量を入力し、登録ボタンを押してください。</p> <html:form action="/com/techscore/struts/chapter14/exercise3/Confirm"> <table border="1"> <tr><th> </th><th>商品コード</th><th>数量</th></tr> <logic:iterate indexId="index" id="item" name="orderForm143" property="items" scope="request"> <tr><td><%=index %></td> <td><nested:root name="item"><nested:text property="productCode" indexed="true" /> <html:errors property="<%="items["+index+"].productCode" %>" /></td> <td><nested:text property="amount" indexed="true" /></nested:root> <html:errors property="<%="items["+index+"].amount" %>" /></td></tr> </logic:iterate> </table> <html:errors /> <p><html:submit value="登録" /></p> </html:form> </body> </html>
<!-- output.jsp --> <!-- TECHSCORE Java JakartaStruts 14章 実習課題3 --> <!-- Copyright (c) 2004 Four-Dimensional Data, Inc. --> <%@ page contentType="text/html; charset=Windows-31J" session="false" pageEncoding="Windows-31J" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-nested" prefix="nested" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %> <html> <head><title>TECHSCORE Java JakartaStruts 14章 実習課題3</title></head> <body> <h2>注文商品の確認</h2> <p>入力されたデータは以下の通りです</p> <table border="2"> <logic:iterate id="item" name="orderForm143" property="items"> <nested:root name="item"><nested:notEmpty property="productCode"> <tr><td><nested:write property="productCode" /></td> <td><nested:write property="amount" /></td></tr> </nested:notEmpty></nested:root> </logic:iterate> </table> <p><html:link action="/com/techscore/struts/chapter14/exercise3/Input">入力に戻る</html:link></p> </body> </html>
▼MessageResources.properties
errors.header=<font color="red"> errors.footer=</font> productCode.illegal=check productCode amount.illegal=check amount
▼struts-config.xml
<?xml version="1.0" encoding="Windows-31J" ?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> <struts-config> <form-beans> <form-bean name="orderForm143" type="com.techscore.struts.chapter14.exercise3.OrderForm" /> </form-beans> <action-mappings> <action path="/com/techscore/struts/chapter14/exercise3/Input" forward="/WEB-INF/JSP/com/techscore/struts/chapter14/exercise3/input.jsp" /> <action path="/com/techscore/struts/chapter14/exercise3/Confirm" name="orderForm143" scope="request" validate="true" input="/WEB-INF/JSP/com/techscore/struts/chapter14/exercise3/input.jsp" forward="/WEB-INF/JSP/com/techscore/struts/chapter14/exercise3/output.jsp" /> </action-mappings> <message-resources parameter="com.techscore.struts.MessageResources" /> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml" /> </plug-in> </struts-config>
▼validation.xml
<?xml version="1.0" encoding="Windows-31J" ?> <!DOCTYPE form-validation PUBLIC "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN" "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd"> <form-validation> <formset> <form name="orderForm143"> <field property="productCode" indexedListProperty="items" depends="mask"> <msg name="mask" key="productCode.illegal" /> <var> <var-name>mask</var-name> <var-value>^[a-zA-Z0-9]{5}$</var-value> </var> </field> <field property="amount" indexedListProperty="items" depends="requiredif, intRange"> <msg name="requiredif" key="amount.illegal" /> <msg name="intRange" key="amount.illegal" /> <var> <var-name>field[0]</var-name> <var-value>productCode</var-value> </var> <var> <var-name>fieldIndexed[0]</var-name> <var-value>true</var-value> </var> <var> <var-name>fieldTest[0]</var-name> <var-value>NOTNULL</var-value> </var> <var> <var-name>min</var-name> <var-value>1</var-value> </var> <var> <var-name>max</var-name> <var-value>100</var-value> </var> </field> </form> </formset> </form-validation>
▼起動URLは以下の通り
WEB_ROOT/com/techscore/struts/chapter14/exercise3/Input.do
EncodingFilter.javaの参照(2章の実習課題2と同じ)