生活随笔
收集整理的這篇文章主要介紹了
使用Struts2验证框架实现输入校验
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
學習了《Struts2權威指南》中關于Struts2的輸入校驗,自己動手測試了一把,也遇到一些問題,在這里記錄一下。直接看代碼:
login.jsp
[xhtml] view plaincopy
< %@?page?language ="java" ?contentType ="text/html;?charset=UTF-8" ?pageEncoding ="UTF-8" %> ??< %@taglib?prefix ="s" ?uri ="/struts-tags" ?%> ??<!DOCTYPE?html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd"> ?? < html > ??< head > ??< meta ?http-equiv ="Content-Type" ?content ="text/html;?charset=UTF-8" > ??< title > </ title > ??</ head > ??< body > ????? ?< s:form ?action ="login" ?validate ="true" > ?? ????< s:textfield ?name ="username" ?label ="用戶名" > </ s:textfield > ?? ????< s:password ?name ="password" ?label ="密???碼" > </ s:password > ?? ????< s:submit ?value ="提交" > </ s:submit > ?? </ s:form > ???</ body > ?? </ html > ?? LoginAction.java
[java] view plaincopy
package ?com.petrochina.action.system;???? import ?com.opensymphony.xwork2.ActionSupport;???? public ?class ?LoginAction?extends ?ActionSupport?{???? ????private ?static ?final ?long ?serialVersionUID?=?1L;?? ????private ?String?username;?? ????private ?String?password;?? ?? ????@Override ?? ????public ?String?execute()?throws ?Exception?{?? ????????if ?(getUsername().equals("admin" )?&&?getPassword().equals("admin" ))?{?? ????????????return ?SUCCESS;?? ????????}?else ?{?? ????????????return ?INPUT;?? ????????}?? ????}?? ?? ????public ?String?getUsername()?{?? ????????return ?username;?? ????}?? ?? ????public ?void ?setUsername(String?username)?{?? ????????this .username?=?username;?? ????}?? ?? ????public ?String?getPassword()?{?? ????????return ?password;?? ????}?? ?? ????public ?void ?setPassword(String?password)?{?? ????????this .password?=?password;?? ????}?? }?? 校驗文件LoginAction-validation.xml,其生成路徑要和LoginAction.class在一起.
[xhtml] view plaincopy
<? 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 ="username" > ?? ?????????? ????????< field-validator ?type ="requiredstring" > ?? ?????????????? ????????????< message ?key ="user.required" /> ?? ????????</ field-validator > ?? ????</ field > ?? ?????? ?????< field ?name ="password" > ?? ?????????? ????????< field-validator ?type ="requiredstring" > ?? ????????????< message ?key ="pass.required" > </ message > ?? ????????</ field-validator > ?? ?????????? ????????< field-validator ?type ="stringlength" > ?? ????????????< param ?name ="minLength" > 3</ param > ?? ????????????< param ?name ="maxLength" > 6</ param > ?? ????????????< message ?key ="pass.length" > </ message > ?? ????????</ field-validator > ?? ?????</ field > ?? ?</ validators > ?? struts.xml
[xhtml] view plaincopy
<? xml ?version ="1.0" ?encoding ="UTF-8" ?> ??<!DOCTYPE?struts?PUBLIC?"-//Apache?Software?Foundation//DTD?Struts?Configuration?2.1//EN"?? ????????"http://struts.apache.org/dtds/struts-2.1.dtd"> ?? < struts > ???????? ?????? ?????? ????< constant ?name ="struts.custom.i18n.resources" ?value ="messageResource" /> ?? ?????? ????< constant ?name ="struts.i18n.reload" ?value ="true" /> ?? ?????? ????< constant ?name ="struts.i18n.encoding" ?value ="UTF-8" /> ??? ?????? ?????? ????< package ?name ="mystruts" ?extends ="struts-default" > ?? ????????< action ?name ="login" ?class ="com.petrochina.action.system.LoginAction" > ?? ????????????< result ?name ="success" > /welcome.jsp</ result > ?? ?????????????? ????????????< result ?name ="input" > /login.jsp</ result > ?? ????????</ action > ?? ????</ package > ?? </ struts > ?? 國際化資源文件messageResource_zh_CN.properties
[xhtml] view plaincopy
#struts校驗?? user.required =用戶名不能為空??pass.required =密碼不能為空??pass.length =密碼必須是3到6位?? 文件結構:
登錄頁面:
不輸入任何內容,點擊"提交",效果如下:
可見對LoginAction中的password屬性定義的兩個校驗器都起作用了,但如果這兩個校驗信息同時顯示有點冗余,此時可以通過設置short-circuit="true"來配置校驗器短路.修改后的LoginAction-validation.xml中password字段的定義如下:
[xhtml] view plaincopy
?? ?????< field ?name ="password" > ?? ?????????? ????????< field-validator ?type ="requiredstring" ?short-circuit ="true" > ?? ????????????< message ?key ="pass.required" > </ message > ?? ????????</ field-validator > ?? ?????????? ????????< field-validator ?type ="stringlength" > ?? ????????????< param ?name ="minLength" > 3</ param > ?? ????????????< param ?name ="maxLength" > 6</ param > ?? ????????????< message ?key ="pass.length" > </ message > ?? ????????</ field-validator > ?? ?????</ field > ?? 這樣如果密碼為空就提交的話只會提示"密碼不能為空",效果如下:
?
PS:直接訪問jsp頁面(http://localhost:8080/struts/login.jsp)會報錯:
?
但是通過action(http://localhost:8080/struts/login.action)就可以正常訪問,去掉struts的客戶端驗證(在jsp頁面的form表單中去掉validate="true"屬性)也可以正常訪問.在網上查了一下資料,大家的解決方法都是走action.個人覺得原因是:通過Action訪問Struts2會加載LoginAction-validation.xml,從而讀取配置的校驗器信息,根據配置的校驗器信息生成客戶端校驗腳本(Javascript),如果直接訪問jsp頁面那么就獲取不到校驗器信息(Method public java.util.List org.apache.struts2.components.Form.getValidators(java.lang.String) threw an exception when invoked on org.apache.struts2.components.Form@18db6e1 - Class: freemarker.ext.beans.SimpleMethodModel),從而無法生成客戶端腳本.
總結
以上是生活随笔 為你收集整理的使用Struts2验证框架实现输入校验 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。