表單驗(yàn)證:使用struts中的validator框架
第一步:我們在struts-config.xml里:
Java代碼
- <action-mappings >
- <action
- attribute="logForm"
- input="/form/log.jsp"
- name="logForm"
- path="/log"
- scope="request"
- type="com.yourcompany.struts.action.LogAction"
- validate="true"
- <forward name="s" path="/form/MyJsp.jsp" />
- </action>
另外,配置文件中還須加入以下代碼,表示使用插件:
Java代碼
- <plug-in className="org.apache.struts.validator.ValidatorPlugIn">
- <set-property property="pathnames"
- value="/WEB-INF/validator-rules.xml,
- /WEB-INF/validation.xml" />
- </plug-in>
注意加入<plug-in>標(biāo)簽的位置,該標(biāo)簽應(yīng)該放在struts配置文件中的最后,具體位置在元素<struts- config></struts-config>內(nèi)部,在<message-resources parameter="com.blog.struts.ApplicationResources" />之后,切記要注意位置,不然報(bào)錯(cuò)。
其次,在寫法上,value的內(nèi)容中/WEB-INF/validator-rules.xml是默認(rèn)的,因?yàn)樵陧?xiàng)目使用struts框架時(shí)該文件已經(jīng)在 此目錄層次下面了,那么之后的/WEB-INF/validation.xml"又是什么呢?這里需要我們手動(dòng)在WEB-INF目錄下新建 validation.xml文件,這個(gè)文件有什么用?先看下其中寫的什么。
Java代碼
- <form-validation>
- <global>
- </global>
- <formset>
- <form name="userForm">
- <field property="userName"
- depends="required,minlength,maxlength">
- <arg0 key="userForm.userName" />
- <arg1 name="minlength" key="${var:min}"
- resource="false" />
- <arg1 name="maxlength" key="${var:max}"
- resource="false" />
- <var>
- <var-name>min</var-name>
- <var-value>6</var-value>
- </var>
- <var>
- <var-name>max</var-name>
- <var-value>20</var-value>
- </var>
- </field>
- <field property="password"
- depends="required,minlength,maxlength,mask">
- <arg0 key="userForm.password" />
- <arg1 name="minlength" key="${var:min}"
- resource="true" />
- <arg1 name="maxlength" key="${var:max}"
- resource="true" />
- <var>
- <var-name>min</var-name>
- <var-value>6</var-value>
- </var>
- <var>
- <var-name>max</var-name>
- <var-value>20</var-value>
- </var>
- <var>
- <var-name>mask</var-name>
- <var-value>^"w+$</var-value>
- </var>
- </field>
- <field property="email" depends="required,email">
- <arg0 key="userForm.email" />
- </field>
- <field property="name" depends="required,maxlength">
- <arg0 key="userForm.name" />
- <arg1 name="maxlength" key="${var:max}"
- resource="false" />
- <var>
- <var-name>max</var-name>
- <var-value>20</var-value>
- </var>
- </field>
- <field property="tel" depends="required,mask">
- <arg0 key="userForm.tel" />
- <var>
- <var-name>mask</var-name>
- <var-value>^"(?("d{3,4})")?[-|]?("d{7,8})$</var-value>
- </var>
- </field>
- <field property="address" depends="required">
- <arg0 key="userForm.address" />
- </field>
- </form>
- <form name="categoryForm">
- <field property="categoryName" depends="required">
- <arg0 key="categoryForm.categoryName" />
- </field>
- </form>
- </formset>
- </form-validation>
Validation.xml:該配置文件是專供應(yīng)用程序使用的,其中所描述的是特定ActionForm會(huì)用到validation-rule.xml文件中的哪些驗(yàn)證器。
1.<form-validation>元素
<form-validation>元素是validation.xml文件的根元素,它包含兩個(gè)子元 素:<global>和<formset>元素。其中<global>元素可以出現(xiàn)零次或多 次,<formset>元素可以出現(xiàn)一次或多次。
2.<global>元素
<global>元素中通過<constant>子元素來定義常量表達(dá)式,每個(gè)<constant>子元素定義一個(gè)常量表達(dá)式,如果有多個(gè)常量表達(dá)式要定義則可以配置多個(gè)<constant>來實(shí)現(xiàn)。
3.<formset>元素
<formset>元素包括兩個(gè)子元素<constant>和<form>。<constant>元素可以出現(xiàn)零次或多次,<form>元素可以出現(xiàn)一次或多次。
這里需要注意的是,在<form>標(biāo)簽中有包括<field>子元素。
4.<field>元素
<field>元素通過property屬性指定字段的名字,通過depends屬性指定具體的驗(yàn)證規(guī)則,驗(yàn)證規(guī)則來源于 validation-rule.xml中所寫的驗(yàn)證方法,這里我們要簡單介紹一下validation-rule.xml里面的驗(yàn)證規(guī)則是默認(rèn),那如果 我們有需要定義自己的驗(yàn)證規(guī)則也可以寫在里面。<field>元素可包含的子元素 為<msg>,<arg>,<var>。
第二步
把validator框架使用的消息文本添加到應(yīng)用的Resource Bundle中,如在ApplicationResources.properties中加入例如:
Java代碼
- errors.header=<b><font color=ff0000><ul>
- errors.footer=</ul></font></b>
- errors.prefix=<li>
- errors.suffix=</li>
- error.isexit="u7528"u6237"u540d"u5df2"u5b58"u5728"uff0c"u8bf7"u91cd"u65b0"u6ce8"u518c"uff01
- error.username="u7528"u6237"u540d"u4e0d"u5408"u6cd5"uff0c"u8bf7"u91cd"u65b0"u586b"u5199"u7528"u6237"u540d"uff01
- error.password="u5bc6"u7801"u4e0d"u5408"u6cd5"uff0c"u8bf7"u91cd"u65b0"u586b"u5199"u5bc6"u7801"uff01
- errors.required={0}"u4e3a"u5fc5"u586b"u5b57"u6bb5
- errors.minlength={0}"u7684"u957f"u5ea6"u4e0d"u80fd"u5c0f"u4e8e{1}
- errors.maxlength={0}"u7684"u957f"u5ea6"u4e0d"u80fd"u5927"u4e8e{1}
- errors.email={0}"u5fc5"u987b"u4e3a"u6709"u6548"u90ae"u4ef6"u5730"u5740
- userForm.userName="u7528"u6237"u540d;
- userForm.password="u5bc6"u7801;
- userForm.email=Email;
- userForm.name="u59d3"u540d;
- userForm.sex="u6027"u522b;
- userForm.tel="u8054"u7cfb"u7535"u8bdd;
- userForm.address="u8054"u7cfb"u5730"u5740;
- userForm.userType="u7528"u6237"u7c7b"u522b;
- categoryForm.categoryName="u7c7b"u522b"u540d"u79f0
第三步
將Form的extends ActionForm改為extends ValidatorForm
第四步
在jsp頁面當(dāng)中,如果我們要?jiǎng)?chuàng)建一個(gè)在服務(wù)器端驗(yàn)證的頁面,我們只需要在控件之后添加<html:errors property="password"/>,即:
<tr>
<td>密碼:</td>
<td><html:password property="password" /><html:errors property="password"/></td>
</tr>
注意<html:errors property="password"/>之中的property對應(yīng)的是form中定義的屬性。
那么如果我們要?jiǎng)?chuàng)建一個(gè)在客戶端進(jìn)行驗(yàn)證的頁面,我們需要如下步驟:
1.在<html:form></html:form>的外面加上<html:javascript formName="userForm"/>
2.在<html:form>中加入屬性onsubmit=”return validateCardForm(this);”,即;
<html:form action="/save_user" method="post" enctype="multipart/form-data" onsubmit="return validateUserForm(this);">
3.同服務(wù)器端驗(yàn)證一樣<td><html:password property="password" /><html:errors property="password"/></td>
重點(diǎn)
使用validator進(jìn)行表單驗(yàn)證的步驟如上,其中最為關(guān)鍵的一步是,validation.xml文件中為表單配置驗(yàn)證規(guī)則的寫法。
注意事項(xiàng)如下:
<form-validation>
<global>
在<global>中定義的常量表達(dá)式,在文件的其余地方可以直接引用。
即,這里配置的常量表達(dá)式是全局的
寫法為:
<constant>
<constant-name>phone</constant-name>
<constant-value>^"(?("d{3})")?[-|]?("d{8})$<constant-value>
//定義一個(gè)名為:phone的正則表達(dá)式,3位區(qū)號+8位號碼
</constant>
</global>
<formset>
<form name="userForm">
<field property="userName"
//這里的property要與form表單屬性名對應(yīng)
depends="required,minlength,maxlength">
//這里的depends用于指定對該屬性使用什么驗(yàn)證規(guī)則,其規(guī)則來自于validator-rule.xml文件中所寫的規(guī)則。指定多個(gè)驗(yàn)證器時(shí),會(huì)依次調(diào)用,直到該表單通過所有驗(yàn)證。
<arg0 key="userForm.userName" />
//arg0對應(yīng)的是ApplicationResources.property中的{0},即:
“errors.required={0}不能為空”,其作用是將arg0中key所對應(yīng)的資源文件中的“userForm.userName= 用戶名”的文中或者說是值替換到“errors.required={0}不能為空”中的{0},這樣頁面輸出的是“用戶名不能為空”;
下面的arg1同理{1}
Java代碼
- <arg1 name="minlength" key="${var:min}"
- resource="false" />
- <arg1 name="maxlength" key="${var:max}"
- resource="false" />
- <var>
- <var-name>min</var-name>
- <var-value>6</var-value>
- </var>
- //var對應(yīng)key="${var:min}"中的min
- <var>
- <var-name>max</var-name>
- <var-value>20</var-value>
- </var>
- </field>
- </form>
- </formset>
- </form-validation>
轉(zhuǎn):http://www.javaeye.com/topic/192579
posted on 2009-07-09 10:17 找個(gè)美女做老婆 閱讀(383) 評論(0) 編輯 收藏