程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Struts1.x系列教程(11):Validator驗證框架高級應用

Struts1.x系列教程(11):Validator驗證框架高級應用

編輯:關於JAVA

在《Struts1.x系列教程(10):Validator驗證框架入門》一文中給出的例子中的name、age和email都是簡單的屬性,如果是嵌套的屬性(也就是一個屬性的數據類型是另外一個帶有屬性的類),可以使用圓點(.)符號來訪問。如我們可以通過設置<field>元素的property屬性值為“employee.salary”來驗證employee屬性中的salary屬性。

如果要驗證的索引屬性,我們可以使用<field>元素的indexedListProperty屬性來指定這個索引屬性,如下面代碼如示:

<field indexedListProperty="items" depends=……>……</field>

在使用上述配置代碼後,Validator框架將會按著depends屬性中的約束來驗證items屬性的每一個值。我們還可以將property和indexedListProperty配合使用,如下面代碼所示:

<field indexedListProperty="items" property="employee.age" depends=……>……</field>

Validator框架將根據上述的配置代碼來驗證items屬性中的每一項的employee.age屬性。

二、使用常量和變量

1. 常量

在《Struts1.x系列教程(10):Validator驗證框架入門》一文中的name屬性使用了mask進行驗證。這個mask實際上代表了一個正則表達式。但如果在validator.xml文件中有很多個地方需要用到這個正則表達式,那就它就會在很多地方重復。為此,我們可以使用常量來避免這種事情發生。  

常量分為全局常量和局部常量。

(1)全局常量

全局常量可以被用在validator.xml中定義的所有form中。我們可以使用<global>元素來配置全局常量。為了配置全局常量,將如下的內容放到第一個<formset>元素的前面。

<global>
    <constant>
      <constant-name>mask</constant-name>
      <constant-value>^[a-zA-Z0-9]*$</constant-value>
    </constant>
  </global>
  <formset>

(2)局部常量

局部常量需要放到<formset>元素的開始位置(根據DTD的定義,局部常量只能放到這裡,而全局常量可以放在第一個<formset>元素的前面,也可以放到<formset>的後面)。如下面的代碼所示:

<formset>
    <constant>
      <constant-name>mask</constant-name>
      <constant-value>^[a-zA-Z0-9]*$</constant-value>
    </constant>
    <form name="firstValidatorForm">……
    ……
  </formset>

我們可以編寫如下的代碼來使用mask常量:

<var>
   <var-name>mask</var-name>
   <var-value>${mask}</var-value>
</var>

2. 變量

Validator框架通過<var>元素來定義變量。變量將作為<field>的子元素被使用。主要向depends屬性值(如mask)以及<msg>的錯誤信息傳遞數據。如下面的代碼通過變量required將“姓名”傳遞給了錯誤信息的第一個參數{0}。

<field property="name"  depends="required ">
<msg name="required" key="error.name.blank" />
<arg name="required" key="${var:required}" position="0" resource="false" />
<var>
<var-name>required</var-name>
<var-value>姓名</var-value>
</var>
</field>

三、客戶端驗證

使用Validator框架的好處之一就是可以很容易地將服務端驗證變為客戶端驗證(JavaScript驗證)。為了完成這一轉換,我們只需要修改兩個地方。現在就拿《Struts1.x系列教程(10):Validator驗證框架入門》中的firstValidator.jsp為例來說明要修改什麼。

首先,在firstValidator.jsp中的任何地方(當然,任何地方指的是客戶端代碼區,並不包括<%...%>和<%--... --%>所包含的內容)添加如下的<html:javascript>標簽:

<html:javascript formName="firstValidatorForm"/>

然後在<html:form>標簽中加入如下的屬性:

onsubmit="return validateFirstValidatorForm(this);"

現在再運行firstValidator.jsp,如果輸入錯誤,IE就會直接彈出錯誤信息對話框。我們查看客戶端源代碼就會發現,在源代碼中多了很多JavaScript代碼。實際上,當加入<html:javascript>標簽後,在運行JSP頁面時,Servlet引擎就會將Validator框架中JavaScript版本的預定義驗證代碼連同HTML代碼都發送到客戶端。這些JavaScript代碼中有一個入口函數,這個函數的名稱前綴為validate,後面是首字母大寫的Form名。在<html:form>標簽中的onsubmit事件中調用這個入口函數就可以通過JavaScript代碼來驗證客戶端錄入的數據了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved