解答例 - 実習課題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と同じ)

