Struts2對象集合(批量輸入)校驗 詳解

jopen 11年前發布 | 27K 次閱讀 Struts2 Web框架

最后的目錄結構:

Struts2對象集合(批量輸入)校驗 詳解

addMaterial.jsp:

<%@ page language="java" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- struts2標簽庫調用聲明 -->
<%@taglib prefix="s" uri="/struts-tags"%>
<%@taglib prefix="sx" uri="/struts-dojo-tags"%>
<html>
 <head>
  <title>添加材料</title>
  <s:head />
  <sx:head />
 </head>
 <body>
 <s:fielderror/>
  <h3 align="left"> 
   Struts2類型轉換使用范例 
  </h3>
  <!-- 材料輸入表單 -->
  <table>
   <s:form id="materialForm" action="addMaterial" theme="simple">
   <table>
   <tr>
   <td>材料名</td>
   <td>價格</td>
   <td>庫存量</td>
   <td>過期日期</td>
   </tr>
   <s:iterator value="new int[4]" status="m">
   <tr>
   <td><s:textfield name="%{'materialList['+#m.index+'].material'}" /></td>
            <td><s:textfield name="%{'materialList['+#m.index+'].bid'}" /></td>
            <td><s:textfield name="%{'materialList['+#m.index+'].mount'}" /></td>
            <td><sx:datetimepicker name="%{'materialList['+#m.index+'].expireDate'}" /></td>
   </tr>
   </s:iterator>
   <tr>
   <td colspan="4"><s:submit value="提交"></s:submit>
   </tr>
   </table> 
   </s:form>
  </table> 
 </body>
</html>

注釋:關于此段代碼詳細解釋見 Struts2 <s:lterator>標簽的一個復雜應用 解析

最終提交的是一個名為materialList的集合實例,它有4個Material類型元素,每個元素都有material、bid、mount、expireDate這四個屬性。

struts.xml:

<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <!-- Action所在包定義 -->
    <package name="Convert" extends="struts-default" >        
        <action name="addMaterial"
            class="com.action.AddMaterialAction">
            <result name="input">/jsp/addMaterial.jsp</result>
            <result name="success">/jsp/showMaterial.jsp</result>
        </action>
        <action name="index">
            <result>/jsp/addMaterial.jsp</result>
        </action>
    </package>
</struts>

注釋:表單數據提交經struts.xml配置導航到action="addMaterial"的Action類AddMaterialAction去處理。

AddMaterialAction.java:

package com.action;
import java.util.List;
import com.model.Material;
import com.opensymphony.xwork2.ActionSupport;

public class AddMaterialAction extends ActionSupport {
    private List<Material> materialList;  

    public String execute() throws Exception {
        return SUCCESS;
    }

    public List<Material> getMaterialList() {
        return materialList;
    }

    public void setMaterialList(List<Material> materialList) {
        this.materialList = materialList;
    }
}

注釋:在JSP頁面按"提交"按鈕后,就相當于"setMaterialList()"方法,實例化一個materialList集合實例。

AddMaterialAction-conversion.properties:

Element_materialList=com.model.Material

注釋:定義了List元素都是Material對象(由于定義時是用泛型List<Material>,此處是可缺省的)。

AddMaterialAction-validation:

<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
    <field name="materialList">
        <field-validator type="visitor">
            <param name="context">materialContext</param>
            <param name="appendPrefix">true</param>
            <message>添加材料輸入校驗:</message>
        </field-validator>
    </field> 
</validators>

注釋:這是Action類AddMaterialAction的校驗配置文件,從命名就可看出來,它放在com.model目錄下。其中的格式算是比較統一的,appendPrefix參數設置了true 即在出錯信息前都加上message標簽中的內容。context參數設置為"materialContext",Material類校驗文件名“-”之間的名字要與之對應,本例為Material-materialContext-validation.xml。

Material.java:

package com.model;
import java.util.Date;

public class Material implements java.io.Serializable {
    // Fields
    private String material;
    private double bid;
    private int mount;
    private Date expireDate;

    public Material() {}

    public double getBid() {
        return bid;
    }

    public void setBid(double bid) {
        this.bid = bid;
    }

    public int getMount() {
        return mount;
    }

    public void setMount(int mount) {
        this.mount = mount;
    }

    public String getMaterial() {
        return this.material;
    }

    public void setMaterial(String material) {
        this.material = material;
    }

    public Date getExpireDate() {
        return expireDate;
    }

    public void setExpireDate(Date expireDate) {
        this.expireDate = expireDate;
    }   
}

Material-materialContext-validation.xml:

<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN" 
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
    <field name="material">
        <field-validator type="requiredstring">
            <message>請輸入材料名</message>
        </field-validator>
    </field>
    <field name="bid">
        <field-validator type="double">
            <param name="minExclusive">0.1</param>
            <message>請輸入價格</message>
        </field-validator>
    </field>
    <field name="mount">
        <field-validator type="int">
            <param name="min">1</param>
            <message>請輸入庫存量</message>
        </field-validator>
    </field>
    <field name="expireDate">
        <field-validator type="required">
            <message>請輸入過期日期</message>
        </field-validator>
        <field-validator type="date">
            <param name="min">2009-01-01</param>
            <param name="max">2019-01-01</param>
            <message>輸入過期日期無效</message>
        </field-validator>
    </field>
</validators>

注釋:這是對于Material這個Java對象的輸入校驗配置文件,它放在com.model目錄下。

struts.properties:

struts.i18n.encoding=gb2312

注釋:使輸入支持字符編碼集GB2312。

showMaterial.jsp:

<%@ page language="java" pageEncoding="gb2312"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- struts2標簽庫調用聲明 -->
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
    <head>
        <title>添加材料</title>
        <s:head />
    </head>
    <body>
        <!-- 材料數據顯示 -->
        <table>
            <tr>
            <td>材料名</td>
            <td>價格</td>
            <td>庫存量</td>
            <td>過期日期</td>
            </tr>
            <s:iterator value="materialList" status="m">
            <tr>
            <td><s:property value="material" ></s:property></td>
            <td><s:property value="bid" ></s:property></td>
            <td><s:property value="mount" ></s:property></td>
            <td><s:property value="expireDate" ></s:property></td>
            </tr>
            </s:iterator>
         </table>       
    </body>
</html>

注釋:它完成提交的表單數據的顯示。

地址欄運行 http://localhost:8080/Convert/jsp/addMaterial.jsp ,顯示頁面:

Struts2對象集合(批量輸入)校驗 詳解

直接“提交”后,輸出:

Struts2對象集合(批量輸入)校驗 詳解

輸入數據如下:

 Struts2對象集合(批量輸入)校驗 詳解

結果:

Struts2對象集合(批量輸入)校驗 詳解

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!