日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Struts2-表单验证的两种方式

發布時間:2025/6/15 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Struts2-表单验证的两种方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. Struts2中的輸入校驗

2. 編碼方式校驗
? 1) Action一定要繼承自ActionSupport
? 2) 針對某個要進行校驗的請求處理方法編寫一個 public void validateXxx()方法,在方法內部進行表單數據校驗.
? 3) 也可針對所有的請求處理方法編寫public void validate()方法。
? 4) 在校驗方法中,可以通過addFieldError()方法來添加字段校驗錯誤消息。
? 5) 當校驗失敗時,Struts框架會自動跳轉到name為input的Result頁面。在校驗失敗頁面中,可以使用<s:fielderror/>來顯示錯誤消息
? 6) 簡單,靈活。但重用性不高。
??
3. XML配置方式校驗。在編碼方式之前被執行。
? 1) 針對要校驗的Action類,在同包下編寫一個名為:Action類名-validation.xml校驗規則文件。
? 2) 在校驗規則文件中添加校驗規則:具體的校驗器名,參數可參看Struts2的reference或Struts2的API。
???? a) Field校驗:針對Action類中每個非自定義類型的Field進行校驗的規則。
??? <field name="要校驗的Field名">
???? <field-validator type="校驗規則器名" short-circuit="是否要短路徑校驗(默認是false)">
???????? <param name="校驗器要使用的參數名">值</param>
??????????? <message>校驗失敗時的提示消息</message>
??</field-validator>
??<!-- 還可添加其它的校驗規則 -->
?</field>
?
???? b) 非Field校驗:針對Action類的某些Field使用OGNL表達進行組合校驗。
??? <validator type="fieldexpression">
??<param name="fieldName">pwd</param>
??? ?<param name="fieldName">pwd2</param>
??? ?<param name="expression"><![CDATA[pwd==pwd2]]></param><!-- OGNL表達式 -->
??? ?<message>確認密碼和密碼輸入不一致</message>
?</validator>
?
???? c) visitor校驗:主要是用來校驗Action類中的自定義類型Field。(針對使用模型驅動方式時)
?????? i) 在Action類的的校驗規則文件中針對自定義類型Field使用visitor校驗規則。
??? <!-- 針對自定義Field使用visitor校驗 -->
?<field name="user">
??<field-validator type="required" short-circuit="true">
??????????? <message>用戶的信息必填</message><!-- 消息前綴 -->
??</field-validator>
??<field-validator type="visitor"><!-- 指定為visitor校驗規則 -->
???<param name="context">userContext</param><!-- 指定本visitor校驗的上下文名 -->
??????????? <param name="appendPrefix">true</param><!-- 是否要添加校驗失敗消息的前綴 -->
??????????? <message>用戶的</message><!-- 消息前綴 -->
??</field-validator>
?</field>
??? ii) 針對visitor的Field編寫一個校驗規則文件.文件名為: visitor字段類型名[-visitor校驗的上下文名]-validation.xml. 例如: 本例中的文件名為User-userContext-validation.xml
????????????????? 注意: 此文件要存放到visitor字段類型所在的包下.
??? iii) 在visitor的Field校驗規則文件中針對要校驗的Field添加校驗規則.
?? 3) 在校驗失敗頁面(名為input的result頁面)中,可以使用<s:fielderror/>來顯示錯誤消息。
?? 4) 默認情況下,XML的校驗規則對Action中所有的請求處理方法生效.此時應該只針對每個要校驗的請求處理方法指定校驗。有兩種方式:
????? i) 只為Action中的指定方法指定校驗規則文件,配置文件命名為:Action類型名-別名-validation.xml,
????????????????????? 別名是要校驗的方法對應的Action標簽的name屬性值。
????????????????????? 如:UserAction在struts2.xml的配置為:
??? <package name="my" extends="struts-default" namespace="/">
??<action name="user_*" class="com.javacrazyer.web.action.UserAction" method="{1}">
???<result name="success">/info.jsp</result>
???<result name="input">/user_{1}.jsp</result>
??</action>
??? </package>??????????????
??????????????? ● UserAction中有registe方法和login方法,要對registe方法進行校驗,則它的校驗規則文件名為:UserAction-user_registe-validation.xml。
???????????????? ● 如果使用visitor校驗器,必需指定visitor校驗的上下文名。
????? ii) 在校驗攔截器中指定要驗證的方法。不太實用。
?? <action name="user_*" class="com.javacrazyer.web.action.UserAction" method="{1}">
??? <result name="success">/info.jsp</result>
??? <result name="input">/user_{1}.jsp</result>
???? <interceptor-ref name="defaultStack">
??????? <!-- 給校驗攔截器指定不進行校驗的方法列表:用逗號隔開 -->
??????? <param name="validation.excludeMethods">*</param>
??????? <!-- 給校驗攔截器指定要進行校驗的方法列表:用逗號隔開 -->
??????? <param name="validation.includeMethods">regist</param>
????? </interceptor-ref>
?? </action>
?? 5) 同時使用客戶端校驗和服務器端校驗
????? i) 設置<s:form>標簽的validate屬性:
???????? false:默認值。校驗框架只執行服務器端校驗。
???????? true:先執行客戶端校驗,然后再執行服務器端校驗。
???????? form標簽會根據你在服務器端配置的驗證規則生成對應的JavaScript驗證代碼。
????????????????????? 目前支持的內置校驗器:required、requiredstring、stringlength、regex validator、email、url、int、double
????? ii) 不太好用,不建議使用。建議使用jQuery進行頁面表單校驗。
?? 6) 自定義校驗器:
????? i) 繼承自FieldValidatorSupport抽象類。重寫validate(Object obj)方法
????? ii) 注冊校驗器類. 在應用程序的classpath下新建一校驗器注冊文件。名為validators.xml,內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
??????? "-//OpenSymphony Group//XWork Validator Config 1.0//EN"
??????? "
http://www.opensymphony.com/xwork/xwork-validator-config-1.0.dtd">
<validators>
? <validator name="校驗器名" class="校驗器類的全限定名"/>?
</validators>

?

4. Annotation方式校驗: Struts2提供了注解的方式校驗
? 1) @Validation 指明這個類或者接口將使用基于注解的校驗。Struts2.1中已被標識為過時。
? 2) @Validations() 在同一個方法上要使用多個注解校驗時。
? 3) @SkipValidation 指定某個方法不需要校驗。否則所有方法都會使用校驗。也可以在檢驗攔截器中使用validateAnnotatedMethodOnly
? 4) 13個內置校驗器的注解版本:(注:這些注解都只能用在方法級別上) 具體參數參見Struts2的API或Reference。
@RequiredFieldValidator
@RequiredStringValidator
@StringLengthFieldValidator
@IntRangeFieldValidator
@DoubleRangeFieldValidator
@DateRangeFieldValidator
@ExpressionValidator
@FieldExpressionValidator
@RegexFieldValidator
@EmailValidator
@UrlValidator
@VisitorFieldValidator
@ConversionErrorFieldValidator

?


acc_registe.jsp

[html] view plaincopy
  • <span?style="font-size:?medium;"><%@?page?language="java"?import="java.util.*"?pageEncoding="utf-8"%>??
  • <%@?taglib?uri="/struts-tags"?prefix="s"?%>??
  • <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">??
  • <html>??
  • ??<head>??
  • ????<title>Struts2中基于XML配置式的校驗器使用示例</title>??
  • ??</head>??
  • ??<body>??
  • <h3>XML配置式校驗器---注冊頁面</h3><hr/>??
  • ??
  • <div?style="color:red"><s:fielderror/></div>??
  • <form?action="acc_registe.action"?method="post">??
  • ????<table>??
  • ????????<tr>??
  • ????????????<td>ID</td>??
  • ????????????<td><input?type="text"?name="id"?value="${param.id}"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td>登錄名</td>??
  • ????????????<td><input?type="text"?name="name"?value="${param.name}"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td>密碼</td>??
  • ????????????<td><input?type="password"?name="pwd"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td>重復密碼</td>??
  • ????????????<td><input?type="password"?name="pwd2"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td>時間</td>??
  • ????????????<td><input?type="text"?name="registed_date"?value="${param.registed_date}"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td>email</td>??
  • ????????????<td><input?type="text"?name="email"?value="${param.email}"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td>考試成績</td>??
  • ????????????<td><input?type="text"?name="score"?value="${param.score}"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td?colspan="2"><input?type="submit"?value="?提交?"/></td>??
  • ????????</tr>??
  • ????</table>??
  • </form>??
  • ??</body>??
  • </html></span>??
  • ?src/struts.xml

    [html] view plaincopy
  • <span?style="font-size:?medium;"><?xml?version="1.0"?encoding="UTF-8"??>??
  • <!DOCTYPE?struts?PUBLIC??
  • ????"-//Apache?Software?Foundation//DTD?Struts?Configuration?2.1.7//EN"??
  • ????"http://struts.apache.org/dtds/struts-2.1.7.dtd">??
  • ??
  • <struts>??
  • ????<!--?請求參數的編碼方式?-->??
  • ????<constant?name="struts.i18n.encoding"?value="UTF-8"/>??
  • ????<!--?指定被struts2處理的請求后綴類型。多個用逗號隔開?-->??
  • ????<constant?name="struts.action.extension"?value="action,do,go,xkk"/>??
  • ????<!--?當struts.xml改動后,是否重新加載。默認值為false(生產環境下使用),開發階段最好打開??-->??
  • ????<constant?name="struts.configuration.xml.reload"?value="true"/>??
  • ????<!--?是否使用struts的開發模式。開發模式會有更多的調試信息。默認值為false(生產環境下使用),開發階段最好打開??-->??
  • ????<constant?name="struts.devMode"?value="false"/>??
  • ????<!--?設置瀏覽器是否緩存靜態內容。默認值為true(生產環境下使用),開發階段最好關閉??-->??
  • ????<constant?name="struts.serve.static.browserCache"?value="false"?/>??
  • ????<!--?是否允許在OGNL表達式中調用靜態方法,默認值為false?-->??
  • ????<constant?name="struts.ognl.allowStaticMethodAccess"?value="true"/>??
  • ??????
  • ????<!--?指定由spring負責action對象的創建???
  • ????<constant?name="struts.objectFactory"?value="spring"?/>??
  • ????-->??
  • ????<!--?是否開啟動態方法調用?-->??
  • ????<constant?name="struts.enable.DynamicMethodInvocation"?value="false"/>??
  • ??????
  • ????<package?name="my"?extends="struts-default"?namespace="/">??
  • ????????<action?name="acc_*"?class="com.javacrazyer.web.action.AccountAction"?method="{1}">??
  • ????????????<result?name="success">/info.jsp</result>??
  • ????????????<result?name="input">/acc_{1}.jsp</result>??
  • ????????</action>??
  • ??????????
  • ????</package>??
  • ??????
  • </struts>??
  • </span>??

  • AccountAction.java

    [java] view plaincopy
  • <span?style="font-size:?medium;">package?com.javacrazyer.web.action;??
  • ??
  • import?java.util.Date;??
  • ??
  • import?com.opensymphony.xwork2.ActionSupport;??
  • ??
  • ??
  • public?class?AccountAction?extends?ActionSupport?{??
  • ????private?static?final?long?serialVersionUID?=?-1418893621512812472L;??
  • ????private?Integer?id;??
  • ????private?String?name;??
  • ????private?String?pwd;??
  • ????private?String?pwd2;??
  • ????private?Double?score;??
  • ????private?Date?registed_date;??
  • ????private?String?email;??
  • ??????
  • ????public?String?registe()?throws?Exception{??
  • ????????System.out.println("registe-------------------");??
  • ????????return?SUCCESS;??
  • ????}??
  • ??????
  • ????public?String?login()throws?Exception{??
  • ????????return?SUCCESS;??
  • ????}??
  • ??????
  • ????public?Integer?getId()?{??
  • ????????return?id;??
  • ????}??
  • ????public?void?setId(Integer?id)?{??
  • ????????this.id?=?id;??
  • ????}??
  • ????public?String?getName()?{??
  • ????????return?name;??
  • ????}??
  • ????public?void?setName(String?name)?{??
  • ????????this.name?=?name;??
  • ????}??
  • ????public?Double?getScore()?{??
  • ????????return?score;??
  • ????}??
  • ????public?void?setScore(Double?score)?{??
  • ????????this.score?=?score;??
  • ????}??
  • ????public?Date?getRegisted_date()?{??
  • ????????return?registed_date;??
  • ????}??
  • ????public?void?setRegisted_date(Date?registedDate)?{??
  • ????????registed_date?=?registedDate;??
  • ????}??
  • ????public?String?getEmail()?{??
  • ????????return?email;??
  • ????}??
  • ????public?void?setEmail(String?email)?{??
  • ????????this.email?=?email;??
  • ????}??
  • ??
  • ????public?String?getPwd()?{??
  • ????????return?pwd;??
  • ????}??
  • ??
  • ????public?void?setPwd(String?pwd)?{??
  • ????????this.pwd?=?pwd;??
  • ????}??
  • ??
  • ????public?String?getPwd2()?{??
  • ????????return?pwd2;??
  • ????}??
  • ??
  • ????public?void?setPwd2(String?pwd2)?{??
  • ????????this.pwd2?=?pwd2;??
  • ????}??
  • }</span>??

  • AccountAction-validation.xml [與AccountAction同目錄]

    [html] view plaincopy
  • <span?style="font-size:?medium;"><?xml?version="1.0"?encoding="UTF-8"?>??
  • <!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="id">??
  • ????????<field-validator?type="required"?short-circuit="true">??
  • ????????????<message>ID必填的</message>??
  • ????????</field-validator>??
  • ????????<field-validator?type="int">??
  • ????????????<param?name="min">20</param>??
  • ????????????<param?name="max">50</param>??
  • ????????????<message>ID必須在?${min}?到?${max}?之間</message>??
  • ????????</field-validator>??
  • ????</field>??
  • ????<field?name="name">??
  • ????????<field-validator?type="requiredstring"?short-circuit="true">??
  • ????????????<message>姓名是必填的</message>??
  • ????????</field-validator>??
  • ????????<field-validator?type="regex">??
  • ????????????<param?name="expression"><![CDATA[(^[a-zA-Z_]\w{3,9}$)]]></param>??
  • ????????????<message>姓名不合法</message>??
  • ????????</field-validator>??
  • ????</field>??
  • ????<field?name="pwd">??
  • ????????<field-validator?type="requiredstring"?short-circuit="true">??
  • ????????????<message>密碼是必填的</message>??
  • ????????</field-validator>??
  • ????</field>??
  • ??????
  • ????<!--?非字段校驗?-->??
  • ????<validator?type="fieldexpression">??
  • ????????<param?name="fieldName">pwd</param>??
  • ????????<param?name="fieldName">pwd2</param>??
  • ????????<param?name="expression"><![CDATA[pwd==pwd2]]></param><!--?OGNL表達式?-->??
  • ????????<message>確認密碼和密碼輸入不一致</message>??
  • ????</validator>??
  • ??????
  • ????<field?name="score">??
  • ????????<field-validator?type="double">??
  • ?????????????<param?name="minInclusive">0.0</param>??
  • ???????????????<param?name="maxInclusive">100.0</param>??
  • ???????????????<message>成績必須在${minInclusive}和${maxInclusive}之間</message>??
  • ????????</field-validator>??
  • ????</field>??
  • ????<field?name="email"?>??
  • ????????<field-validator?type="regex">??
  • ?????????????<param?name="expression"><![CDATA[(^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+((\.com)|(\.cn)|(\.net)|(\.org)|(\.info)|(\.edu)|(\.mil)|(\.gov)|(\.biz)|(\.ws)|(\.us)|(\.tv)|(\.cc)|(\.aero)|(\.arpa)|(\.coop)|(\.int)|(\.jobs)|(\.museum)|(\.name)|(\.pro)|(\.travel)|(\.nato)|(\..{2,3})|(\..{2,3}\..{2,3}))$)]]></param>??
  • ?????????????<message>郵箱不合法</message>??
  • ????????</field-validator>??
  • ????</field>??
  • ??????
  • ????<field?name="registed_date">??
  • ????????<field-validator?type="date">??
  • ?????????????<param?name="min">1970-01-01</param>??
  • ?????????????<param?name="max">2019-01-01</param>??
  • ?????????????<message>注冊日期不合法</message>??
  • ????????</field-validator>??
  • ????</field>??
  • </validators></span>??

  • 第二個示例:XML配置式校驗器---登錄和注冊頁面

    user_login.jsp

    [html] view plaincopy
  • <span?style="font-size:?medium;"><%@?page?language="java"?import="java.util.*"?pageEncoding="utf-8"%>??
  • <%@?taglib?uri="/struts-tags"?prefix="s"?%>??
  • <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">??
  • <html>??
  • ??<head>??
  • ????<title>Struts2中基于XML配置式的校驗器使用示例</title>??
  • ??</head>??
  • ??<body>??
  • <h3>XML配置式校驗器---登錄頁面</h3><hr/>??
  • <div?style="color:red"><s:fielderror/></div>??
  • <form?action="user_login.action"?method="post">??
  • ????<table>??
  • ????????<tr>??
  • ????????????<td>登錄名</td>??
  • ????????????<td><input?type="text"?name="user.name"?value="${param['user.name']}"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td>密碼</td>??
  • ????????????<td><input?type="password"?name="user.pwd"/></td>??
  • ????????</tr>??
  • ????????<tr><td?colspan="2"><input?type="submit"?value="?提交?"/></td></tr>??
  • ????</table>??
  • </form>??
  • ??</body>??
  • </html></span>??
  • user_registe.jsp

    [html] view plaincopy
  • <span?style="font-size:?medium;"><%@?page?language="java"?import="java.util.*"?pageEncoding="utf-8"%>??
  • <%@?taglib?uri="/struts-tags"?prefix="s"?%>??
  • <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">??
  • <html>??
  • ??<head>??
  • ????<title>Struts2中基于XML配置式的校驗器使用示例</title>??
  • ??</head>??
  • ??<body>??
  • <h3>XML配置式校驗器---注冊頁面</h3><hr/>??
  • ??
  • <div?style="color:red"><s:fielderror/></div>??
  • <form?action="user_registe.action"?method="post">??
  • ????<table>??
  • ????????<tr>??
  • ????????????<td>ID</td>??
  • ????????????<td><input?type="text"?name="user.id"?value="${param['user.id']}"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td>登錄名</td>??
  • ????????????<td><input?type="text"?name="user.name"?value="${param['user.name']}"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td>密碼</td>??
  • ????????????<td><input?type="password"?name="user.pwd"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td>重復密碼</td>??
  • ????????????<td><input?type="password"?name="user.pwd2"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td>時間</td>??
  • ????????????<td><input?type="text"?name="user.registed_date"?value="${param['user.registed_date']}"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td>email</td>??
  • ????????????<td><input?type="text"?name="user.email"?value="${param['user.email']}"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td>考試成績</td>??
  • ????????????<td><input?type="text"?name="user.score"?value="${param['user.score']}"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td?colspan="2"><input?type="submit"?value="?提交?"/></td>??
  • ????????</tr>??
  • ????</table>??
  • </form>??
  • ??</body>??
  • </html></span>??
  • src/struts.xml [html] view plaincopy
  • <span?style="font-size:?medium;"><?xml?version="1.0"?encoding="UTF-8"??>??
  • <!DOCTYPE?struts?PUBLIC??
  • ????"-//Apache?Software?Foundation//DTD?Struts?Configuration?2.1.7//EN"??
  • ????"http://struts.apache.org/dtds/struts-2.1.7.dtd">??
  • ??
  • <struts>??
  • ????<!--?請求參數的編碼方式?-->??
  • ????<constant?name="struts.i18n.encoding"?value="UTF-8"/>??
  • ????<!--?指定被struts2處理的請求后綴類型。多個用逗號隔開?-->??
  • ????<constant?name="struts.action.extension"?value="action,do,go,xkk"/>??
  • ????<!--?當struts.xml改動后,是否重新加載。默認值為false(生產環境下使用),開發階段最好打開??-->??
  • ????<constant?name="struts.configuration.xml.reload"?value="true"/>??
  • ????<!--?是否使用struts的開發模式。開發模式會有更多的調試信息。默認值為false(生產環境下使用),開發階段最好打開??-->??
  • ????<constant?name="struts.devMode"?value="false"/>??
  • ????<!--?設置瀏覽器是否緩存靜態內容。默認值為true(生產環境下使用),開發階段最好關閉??-->??
  • ????<constant?name="struts.serve.static.browserCache"?value="false"?/>??
  • ????<!--?是否允許在OGNL表達式中調用靜態方法,默認值為false?-->??
  • ????<constant?name="struts.ognl.allowStaticMethodAccess"?value="true"/>??
  • ??????
  • ????<!--?指定由spring負責action對象的創建???
  • ????<constant?name="struts.objectFactory"?value="spring"?/>??
  • ????-->??
  • ????<!--?是否開啟動態方法調用?-->??
  • ????<constant?name="struts.enable.DynamicMethodInvocation"?value="false"/>??
  • ??????
  • ????<package?name="my"?extends="struts-default"?namespace="/">??
  • ????????<action?name="user_*"?class="com.javacrazyer.web.action.UserAction"?method="{1}">??
  • ????????????<result?name="success">/info.jsp</result>??
  • ????????????<result?name="input">/user_{1}.jsp</result>??
  • ????????</action>??
  • ????</package>??
  • ??????
  • </struts>??
  • </span>??

  • UserAction.java

    [java] view plaincopy
  • <span?style="font-size:?medium;">package?com.javacrazyer.web.action;??
  • ??
  • ??
  • import?com.javacrazyer.domain.User;??
  • import?com.opensymphony.xwork2.ActionSupport;??
  • ??
  • ??
  • public?class?UserAction?extends?ActionSupport?{??
  • ????private?static?final?long?serialVersionUID?=?-2554018432709689579L;??
  • ????private?User?user;?//自定義類型Field??
  • ??????
  • ??????
  • ??????
  • ????public?String?registe()?throws?Exception{??
  • ????????System.out.println("registe======================");??
  • ????????return?SUCCESS;??
  • ????}??
  • ??????
  • ????public?String?login()?throws?Exception{??
  • ????????return?SUCCESS;??
  • ????}??
  • ????/*?
  • ????public?void?validate(){?
  • ????????System.out.println("調用validate方法");?
  • ????}?
  • ?????
  • ????//執行exceute方法前調用?
  • ????public?void?validateRegiste(){?
  • ????????System.out.println("調用validateRegiste方法");?
  • ????????String?lname?=?user.getLoginname();?
  • ?????????if(null?!=?lname?&&?!lname.trim().matches("[a-zA-Z_]\\w{3,19}")){?
  • ????????????????this.addFieldError("loginname",?"用戶名不能為空,且只能由4-20個字母和數字組成");?
  • ????????????????//this.addActionError("用戶名不能為空,且只能由4-20個字母和數字組成");?
  • ????????}?
  • ????}?
  • ?????
  • ????public?void?validateLogin(){?
  • ????????System.out.println("調用validateLogin方法");?
  • ????}?
  • */??
  • ????public?User?getUser()?{??
  • ????????return?user;??
  • ????}??
  • ??
  • ????public?void?setUser(User?user)?{??
  • ????????this.user?=?user;??
  • ????}??
  • ??????
  • }</span>??
  • UserAction-user_login-validation.xml

    [html] view plaincopy
  • <span?style="font-size:?medium;"><?xml?version="1.0"?encoding="UTF-8"?>??
  • <!DOCTYPE?validators?PUBLIC???
  • ????"-//OpenSymphony?Group//XWork?Validator?1.0.2//EN"???
  • ????"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">??
  • <validators>??
  • ????<!--?針對自定義Field使用visitor校驗?-->??
  • ????<field?name="user">??
  • ????????<field-validator?type="required"?short-circuit="true">??
  • ????????????<message>用戶的信息必填</message><!--?消息前綴?-->??
  • ????????</field-validator>??
  • ????????<field-validator?type="visitor">??
  • ????????????<param?name="context">userLoginContext</param><!--?指定本visitor校驗的上下文?-->??
  • ????????????<param?name="appendPrefix">true</param><!--?是否要添加校驗失敗消息的前綴?-->??
  • ????????????<message>用戶的</message><!--?消息前綴?-->??
  • ????????</field-validator>??
  • ????</field>??
  • </validators></span>??

  • UserAction-user_registe-validation.xml [html] view plaincopy
  • <span?style="font-size:?medium;"><?xml?version="1.0"?encoding="UTF-8"?>??
  • <!DOCTYPE?validators?PUBLIC???
  • ????"-//OpenSymphony?Group//XWork?Validator?1.0.2//EN"???
  • ????"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">??
  • <validators>??
  • ????<!--?針對自定義Field使用visitor校驗?-->??
  • ????<field?name="user">??
  • ????????<field-validator?type="required"?short-circuit="true">??
  • ????????????<message>用戶的信息必填</message><!--?消息前綴?-->??
  • ????????</field-validator>??
  • ????????<field-validator?type="visitor">??
  • ????????????<param?name="context">userContext</param><!--?指定本visitor校驗的上下文?-->??
  • ????????????<param?name="appendPrefix">true</param><!--?是否要添加校驗失敗消息的前綴?-->??
  • ????????????<message>用戶的</message><!--?消息前綴?-->??
  • ????????</field-validator>??
  • ????</field>??
  • </validators></span>??
  • 第三個示例:注解方式校驗器---注冊頁面
    acc2_registe.jsp
    [html] view plaincopy
  • <span?style="font-size:?medium;"><%@?page?language="java"?import="java.util.*"?pageEncoding="utf-8"%>??
  • <%@?taglib?uri="/struts-tags"?prefix="s"?%>??
  • <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">??
  • <html>??
  • ??<head>??
  • ????<title>Struts2中基于Annotation配置式的校驗器使用示例</title>??
  • ??</head>??
  • ??<body>??
  • <h3>Annotation配置式校驗器---注冊頁面</h3><hr/>??
  • ??
  • <div?style="color:red"><s:fielderror/></div>??
  • <form?action="acc2_registe.action"?method="post">??
  • ????<table>??
  • ????????<tr>??
  • ????????????<td>ID</td>??
  • ????????????<td><input?type="text"?name="id"?value="${param.id}"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td>登錄名</td>??
  • ????????????<td><input?type="text"?name="name"?value="${param.name}"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td>密碼</td>??
  • ????????????<td><input?type="password"?name="pwd"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td>重復密碼</td>??
  • ????????????<td><input?type="password"?name="pwd2"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td>時間</td>??
  • ????????????<td><input?type="text"?name="registed_date"?value="${param.registed_date}"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td>email</td>??
  • ????????????<td><input?type="text"?name="email"?value="${param.email}"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td>考試成績</td>??
  • ????????????<td><input?type="text"?name="score"?value="${param.score}"/></td>??
  • ????????</tr>??
  • ????????<tr>??
  • ????????????<td?colspan="2"><input?type="submit"?value="?提交?"/></td>??
  • ????????</tr>??
  • ????</table>??
  • </form>??
  • ??</body>??
  • </html></span>??

  • src/struts.xml

    [html] view plaincopy
  • <span?style="font-size:?medium;"><?xml?version="1.0"?encoding="UTF-8"??>??
  • <!DOCTYPE?struts?PUBLIC??
  • ????"-//Apache?Software?Foundation//DTD?Struts?Configuration?2.1.7//EN"??
  • ????"http://struts.apache.org/dtds/struts-2.1.7.dtd">??
  • ??
  • <struts>??
  • ????<!--?請求參數的編碼方式?-->??
  • ????<constant?name="struts.i18n.encoding"?value="UTF-8"/>??
  • ????<!--?指定被struts2處理的請求后綴類型。多個用逗號隔開?-->??
  • ????<constant?name="struts.action.extension"?value="action,do,go,xkk"/>??
  • ????<!--?當struts.xml改動后,是否重新加載。默認值為false(生產環境下使用),開發階段最好打開??-->??
  • ????<constant?name="struts.configuration.xml.reload"?value="true"/>??
  • ????<!--?是否使用struts的開發模式。開發模式會有更多的調試信息。默認值為false(生產環境下使用),開發階段最好打開??-->??
  • ????<constant?name="struts.devMode"?value="false"/>??
  • ????<!--?設置瀏覽器是否緩存靜態內容。默認值為true(生產環境下使用),開發階段最好關閉??-->??
  • ????<constant?name="struts.serve.static.browserCache"?value="false"?/>??
  • ????<!--?是否允許在OGNL表達式中調用靜態方法,默認值為false?-->??
  • ????<constant?name="struts.ognl.allowStaticMethodAccess"?value="true"/>??
  • ??????
  • ????<!--?指定由spring負責action對象的創建???
  • ????<constant?name="struts.objectFactory"?value="spring"?/>??
  • ????-->??
  • ????<!--?是否開啟動態方法調用?-->??
  • ????<constant?name="struts.enable.DynamicMethodInvocation"?value="false"/>??
  • ??????
  • ????<package?name="my"?extends="struts-default"?namespace="/">??
  • ????????????<action?name="acc2_*"?class="com.javacrazyer.web.action.Account2Action"?method="{1}">??
  • ????????????<result?name="success">/info.jsp</result>??
  • ????????????<result?name="input">/acc2_{1}.jsp</result>??
  • ????????</action>??
  • ????</package>??
  • ??????
  • </struts>??
  • </span>??

  • Account2Action.java

    [java] view plaincopy
  • <span?style="font-size:?medium;">package?com.javacrazyer.web.action;??
  • ??
  • import?java.util.Date;??
  • ??
  • import?org.apache.struts2.interceptor.validation.SkipValidation;??
  • ??
  • import?com.opensymphony.xwork2.ActionSupport;??
  • import?com.opensymphony.xwork2.validator.annotations.FieldExpressionValidator;??
  • import?com.opensymphony.xwork2.validator.annotations.RegexFieldValidator;??
  • import?com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;??
  • import?com.opensymphony.xwork2.validator.annotations.Validations;??
  • import?com.opensymphony.xwork2.validator.annotations.ValidatorType;??
  • ??
  • /**?
  • ?*?使用注解來配置校驗的示例?
  • ?*?
  • ?*/??
  • public?class?Account2Action?extends?ActionSupport?{??
  • ????private?static?final?long?serialVersionUID?=?-1418893621512812472L;??
  • ????private?Integer?id;??
  • ????private?String?name;??
  • ????private?String?pwd;??
  • ????private?String?pwd2;??
  • ????private?Double?score;??
  • ????private?Date?registed_date;??
  • ????private?String?email;??
  • ??????
  • ??????
  • ????@Validations(??
  • ????????????requiredStrings={@RequiredStringValidator(fieldName="name",message="我的用戶名是必須的",shortCircuit=true,trim=true,type=ValidatorType.FIELD),??
  • ????????????????????@RequiredStringValidator(fieldName="pwd",message="我的密碼是必須的",shortCircuit=true,trim=true,type=ValidatorType.FIELD)},??
  • ????????????fieldExpressions={@FieldExpressionValidator(fieldName="pwd",?message="兩次密碼不相同",expression="pwd==pwd2")},??
  • ????????????regexFields={@RegexFieldValidator(expression="^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@([A-Za-z0-9-])+((\\.com)|(\\.cn)|(\\.net)|(\\.org)|(\\.info)|(\\.edu)|(\\.mil)|(\\.gov)|(\\.biz)|(\\.ws)|(\\.us)|(\\.tv)|(\\.cc)|(\\.aero)|(\\.arpa)|(\\.coop)|(\\.int)|(\\.jobs)|(\\.museum)|(\\.name)|(\\.pro)|(\\.travel)|(\\.nato)|(\\..{2,3})|(\\..{2,3}\\..{2,3}))$")}??
  • ????)??
  • ????public?String?registe()?throws?Exception{??
  • ????????System.out.println("registe-------------------");??
  • ????????return?SUCCESS;??
  • ????}??
  • ??????
  • ????@SkipValidation??
  • ????public?String?login()throws?Exception{??
  • ????????return?SUCCESS;??
  • ????}??
  • ??????
  • ????public?Integer?getId()?{??
  • ????????return?id;??
  • ????}??
  • ????public?void?setId(Integer?id)?{??
  • ????????this.id?=?id;??
  • ????}??
  • ????public?String?getName()?{??
  • ????????return?name;??
  • ????}??
  • ????public?void?setName(String?name)?{??
  • ????????this.name?=?name;??
  • ????}??
  • ????public?Double?getScore()?{??
  • ????????return?score;??
  • ????}??
  • ????public?void?setScore(Double?score)?{??
  • ????????this.score?=?score;??
  • ????}??
  • ????public?Date?getRegisted_date()?{??
  • ????????return?registed_date;??
  • ????}??
  • ????public?void?setRegisted_date(Date?registedDate)?{??
  • ????????registed_date?=?registedDate;??
  • ????}??
  • ????public?String?getEmail()?{??
  • ????????return?email;??
  • ????}??
  • ????public?void?setEmail(String?email)?{??
  • ????????this.email?=?email;??
  • ????}??
  • ??
  • ????public?String?getPwd()?{??
  • ????????return?pwd;??
  • ????}??
  • ??
  • ????public?void?setPwd(String?pwd)?{??
  • ????????this.pwd?=?pwd;??
  • ????}??
  • ??
  • ????public?String?getPwd2()?{??
  • ????????return?pwd2;??
  • ????}??
  • ??
  • ????public?void?setPwd2(String?pwd2)?{??
  • ????????this.pwd2?=?pwd2;??
  • ????}??
  • }</span>?
  • 總結

    以上是生活随笔為你收集整理的Struts2-表单验证的两种方式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。