熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Struts2教程5:使用Validation框架驗證數據

2022-06-13   來源: Java開源技術 

  在《Struts教程使用validate方法驗證數據》中曾講到使用validate方法來驗證客戶端提交的數據但如果使用validate方法就會將驗證代碼和正常的邏輯代碼混在一起但這樣做並不利於代碼維護而且也很難將過些代碼用於其他程序的驗證在Struts中為我們提供了一個Validation框架這個框架和Strutsx提供的Validation框架類似也是通過XML文件進行配置

  服務端驗證

  下面將給出一個例子來演示如何使用Struts的validation框架來進行服務端驗證我們可以按著如下四步來編寫這個程序

  【第步】建立Action類(NewValidateActionjava)

  packageaction;

   importcomopensymphonyxworkActionSupport;
publicclassNewValidateActionextendsActionSupport
{
privateStringmsg; //必須輸入
privateintage; //在之間
publicStringgetMsg()
{
returnmsg;
}
publicvoidsetMsg(Stringmsg)
{
thismsg=msg;
}
publicintgetAge()
{
returnage;
}
publicvoidsetAge(intage)
{
thisage=age;
}
}

  下面我們來驗證msg和age屬性

  【第步】配置Action類strutsxml的代碼

  如下

  

  <?xmlversion=encoding=UTF?>
<!DOCTYPEstrutsPUBLIC
//ApacheSoftwareFoundation//DTDStrutsConfiguration//EN
dtd
<struts>
<packagename=demoextends=strutsdefaultnamespace=/test
<actionname=new_validateclass=actionNewValidateAction
<resultname=input>/validate_formjsp</result>
<resultname=success>/validate_formjsp</result>
</action>
</package>
</struts>

  【第步】編寫驗證規則配置文件

  這是一個基於XML的配置文件和strutsx中的validator框架的驗證規則配置文件類似但一般放到和要驗證的class文件在同一目錄下而且配置文件名要使用如下兩個規則中的一個來命名

  

  <ActionClassName>validationxml
<ActionClassName><ActionAliasName>validationxml

  其中<ActionAliasName>就是strutsxml中<ation>的name屬性值在本例中我們使用第一種命名規則所以文件名是NewValidateActionvalidationxml文件的內容如下

  

  <?xmlversion=encoding=UTF?>
<!DOCTYPEvalidatorsPUBLIC//OpenSymphonyGroup//XWorkValidator//EN
validatordtd
<validators>
<fieldname=msg
<fieldvalidatortype=requiredstring
<message>請輸入信息</message>
</fieldvalidator>
</field>
<fieldname=age
<fieldvalidatortype=int
<paramname=min</param>
<paramname=max</param>
<message>
必須在之間
</message>
</fieldvalidator>
</field>
</validators>

  這個文件使用了兩個規則requiredstring(必須輸入)和int(確定整型范圍)關於其他更詳細的驗證規則請讀者訪問來查看

  【第步】編寫數據錄入JSP頁

  在Web根目錄中建立一個validate_formjsp文件代碼如下

  

  <%@pagelanguage=javaimport=javautil*pageEncoding=GBK%>
<%@taglibprefix=suri=/strutstags%>
<linkrel=stylesheettype=text/css<s:urlvalue=/styles/stylescss/>
<html>
 <head>
<title>驗證數據</title>
 </head> 
 <body>
<s:formaction=new_validatenamespace=/test
<s:textfieldname=msglabel=姓名 />
<s:textfieldname=agelabel=年齡/>
<s:submit/>
</s:form>
 </body> 
</html>

  大家要注意一下如果在strutsxml的<package>標簽中指定namespace屬性需要在<s:form>中也將namespace和action分開寫如上面代碼所示不能將其連在一起Struts需要分開的action和namespace如下面的代碼是錯誤的

  

  <s:form action=/test/new_validate
 
</s:form>

  在上面的程序中還使用了一個stylescss來定制錯誤信息的風格代碼如下

  

  label {fontstyle:italic; }
errorLabel {fontstyle:italic;color:red; }
errorMessage {fontweight:bold; color:red; }

  需要在Web根目錄中建立一個styles目錄並將stylescss

  假設Web工程的上下文路徑是validation可以使用如下的URL來測試這個程序

  

  顯示結果如圖所示

   

  客戶端驗證

  在Struts中實現客戶端驗證非常簡單只需要在<s:form>中加入一個validate屬性值為true如<s:form validate=true </form>即可

  驗證嵌套屬性

  有一類特殊的屬性即這個屬性的類型是另外一個JavaBean如有一個User類代碼如下

  packagedata;

  

  publicclassUser
{
privateStringname;
privateintage;
publicStringgetName()
{
returnname;
}
publicvoidsetName(Stringname)
{
thisname=name;
}
publicintgetAge()
{
returnage;
}
publicvoidsetAge(intage)
{
thisage=age;
}
}

  在NewValidateAction類中加一個user屬性代碼如下

  packageaction;



  

  importcomopensymphonyxworkActionSupport;
importdataUser;
publicclassNewValidateActionextendsActionSupport
{
privateStringmsg;
privateintage;
privateUseruser;
publicStringgetMsg()
{
returnmsg;
}
publicvoidsetMsg(Stringmsg)
{
thismsg=msg;
}
publicintgetAge()
{
returnage;
}
publicvoidsetAge(intage)
{
thisage=age;
}
publicUsergetUser()
{
returnuser;
}
publicvoidsetUser(Useruser)
{
thisuser=user;
}
}

  如果要驗證NewValidateAction中的user屬性可以使用visitor驗證器操作過程如下

  首先在NewValidateActionvalidationxml中加入一個<field>標簽代碼如下

  

  <?xmlversion=encoding=UTF?>
<!DOCTYPEvalidatorsPUBLIC//OpenSymphonyGroup//XWorkValidator//EN
validatordtd
<validators>
……
<fieldname=user
<fieldvalidatortype=visitor
<paramname=context>abc</param>
<paramname=appendPrefix>true</param>
<message>User:</message>
</fieldvalidator>
</field>
</validators>

  其中context參數將作為驗證User類屬性的文件名的一部分如user屬性返回一個User對象那麼用於驗證User對象屬性的文件名為Userabcvalidationxml這個文件要和Userclass文件在同一個目錄中appendPrefix表示是否在字段裡加user如果為trueStruts就會使用username在form提交的數據中查找要驗證的數據這個屬性的默認值是true如果出錯Struts會將<message>標簽中的信息加到Userabcvalidationxml文件中的相應錯誤信息前面

  Userabcvalidationxml文件的內容如下

  

  <?xmlversion=encoding=UTF?>
<!DOCTYPEvalidatorsPUBLIC//OpenSymphonyGroup//XWorkValidator//EN
validatordtd
<validators>
<fieldname=name
<fieldvalidatortype=requiredstring
<message>請輸入name</message>
</fieldvalidator>
</field>
<fieldname=age
<fieldvalidatortype=int
<paramname=min</param>
<paramname=max</param>
<message>
必須在之間
</message>
</fieldvalidator>
</field>
</validators>

  下面修改validate_formjsp代碼如下

  

  <s:formvalidate=trueaction=new_validatenamespace=/test
<s:textfieldname=msglabel=姓名 />
<s:textfieldname=agelabel=年齡/>
<s:textfieldname=usernamelabel=姓名 />
<s:textfieldname=useragelabel=年齡/>
<s:submit/>
</s:form>

  大家可以看到最後兩個<s:textfield>的name屬性是username和userage正好是加了前綴的

  現在重新訪問驗證界面如圖所示

  Java開源技術免費提供,內容來源於互聯網,本文歸原作者所有。

推薦文章
Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.