目次へ

解答例 - 実習課題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

web.xmlの参照(13章の実習課題5と同じ)

EncodingFilter.javaの参照(2章の実習課題2と同じ)


↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp