精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

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

開發 開發工具 后端
Struts是Apache基金會Jakarta項目組的一個Open Source項目,它采用MVC模式,能夠很好地幫助Java開發者利用J2EE開發Web應用。和其他的Java架構一樣,Struts也是面向對象設計,將MVC模式"分離顯示邏輯和業務邏輯"的能力發揮得淋漓盡致。Struts的目的是為了減少在運用MVC設計模型來開發Web應用的時間。你仍然需要學習和應用該架構,不過它將可以完成其中一些繁重的工作。在本系列教程中我們將學習到Struts2的各種技術。

【相關文章】

  1. Struts2教程1:***個Struts2程序
  2. Struts2教程2:處理一個form多個submit
  3. Struts2教程3:struts.xml常用配置解析
  4. Struts2教程4:使用validate方法驗證數據
  5. Struts2教程6:在Action類中獲得HttpServletResponse對象
  6. Struts2教程7:上傳任意多個文件
  7. Struts2教程8:攔截器概述
  8. Struts2教程9:實現自已的攔截器
  9. Struts2教程10:國際化

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

服務端驗證

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

【第1步】建立Action類(NewValidateAction.java)

packageaction;

importcom.opensymphony.xwork2.ActionSupport;
publicclassNewValidateActionextendsActionSupport
{
  privateStringmsg; //必須輸入
  privateintage; //在13和20之間
  publicStringgetMsg()
  {
    returnmsg;
  }
  publicvoidsetMsg(Stringmsg)
  {
    this.msg=msg;
  }
  publicintgetAge()
  {
    returnage;
  }
  publicvoidsetAge(intage)
  {
    this.age=age;
  }
}

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

【第2步】配置Action類,struts.xml的代碼

如下:

<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEstrutsPUBLIC
  "-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"
  "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
  <packagename="demo"extends="struts-default"namespace="/test">
    <actionname="new_validate"class="action.NewValidateAction">
      <resultname="input">/validate_form.jsp</result>
      <resultname="success">/validate_form.jsp</result>
    </action>
  </package>
</struts>

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

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

<ActionClassName>-validation.xml
  
<ActionClassName>-<ActionAliasName>-validation.xml

其中<ActionAliasName>就是struts.xml中<ation>的name屬性值。在本例中我們使用***種命名規則,所以文件名是NewValidateAction-validation.xml。文件的內容如下:

<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
  <fieldname="msg">
    <field-validatortype="requiredstring">
      <message>請輸入信息</message>
    </field-validator>
  </field>
  <fieldname="age">
    <field-validatortype="int">
      <paramname="min">13</param>
      <paramname="max">20</param>
      <message>
        必須在13至20之間
      </message>
    </field-validator>
  </field>
</validators>

這個文件使用了兩個規則:requiredstring(必須輸入)和int(確定整型范圍)。關于其他更詳細的驗證規則,請讀者訪問http://struts.apache.org/2.0.11.1/docs/validation.html來查看。

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

在Web根目錄中建立一個validate_form.jsp文件,代碼如下:

<%@pagelanguage="java"import="java.util.*"pageEncoding="GBK"%>
<%@taglibprefix="s"uri="/struts-tags"%>
<linkrel="stylesheet"type="text/css"href="<s:urlvalue="/styles/styles.css"/>">
<html>
 <head>
  <title>驗證數據</title>
 </head> 
 <body>
  <s:formaction="new_validate"namespace="/test">
    <s:textfieldname="msg"label="姓名" />
    <s:textfieldname="age"label="年齡"/>
    <s:submit/>
  </s:form>
 </body> 
</html>

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

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

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

.label {font-style:italic; }
  
.errorLabel {font-style:italic;color:red; }
  
.errorMessage {font-weight:bold; color:red; }

需要在Web根目錄中建立一個styles目錄,并將styles.css

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

http://localhost:8080/validation/validate_form.jsp

顯示結果如圖1所示。

 
圖1

客戶端驗證

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

#p#

驗證嵌套屬性

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

packagedata;

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

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

packageaction;

importcom.opensymphony.xwork2.ActionSupport;
importdata.User;
publicclassNewValidateActionextendsActionSupport
{
  privateStringmsg;
  privateintage;
  privateUseruser;
  publicStringgetMsg()
  {
    returnmsg;
  }
  publicvoidsetMsg(Stringmsg)
  {
    this.msg=msg;
  }
  publicintgetAge()
  {
    returnage;
  }
  publicvoidsetAge(intage)
  {
    this.age=age;
  }
  publicUsergetUser()
  {
    returnuser;
  }
  
  publicvoidsetUser(Useruser)
  {
    this.user=user;
  }
}

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

首先在NewValidateAction-validation.xml中加入一個<field>標簽,代碼如下:

<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
  ……
  
  <fieldname="user">
  <field-validatortype="visitor">
      <paramname="context">abc</param>
      <paramname="appendPrefix">true</param>
      <message>User:</message>
    </field-validator>
  </field>
</validators>

其中context參數將作為驗證User類屬性的文件名的一部分,如user屬性返回一個User對象,那么用于驗證User對象屬性的文件名為User-abc-validation.xml。這個文件要和User.class文件在同一個目錄中。appendPrefix表示是否在字段里加user,如果為true,Struts2就會使用user.name在form提交的數據中查找要驗證的數據。這個屬性的默認值是true。如果出錯,Struts2會將<message>標簽中的信息加到User-abc-validation.xml文件中的相應錯誤信息前面。

User-abc-validation.xml文件的內容如下:

<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEvalidatorsPUBLIC"-//OpenSymphonyGroup//XWorkValidator1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
  <fieldname="name">
    <field-validatortype="requiredstring">
      <message>請輸入name</message>
    </field-validator>
  </field>
  <fieldname="age">
    <field-validatortype="int">
      <paramname="min">5</param>
      <paramname="max">20</param>
      <message>
        必須在5至20之間
      </message>
    </field-validator>
  </field>
</validators>

下面修改validate_form.jsp,代碼如下:

<s:formvalidate="true"action="new_validate"namespace="/test">
  <s:textfieldname="msg"label="姓名" />
  <s:textfieldname="age"label="年齡"/>
  <s:textfieldname="user.name"label="姓名1" />
  <s:textfieldname="user.age"label="年齡1"/>
  <s:submit/>
</s:form>

大家可以看到,***兩個<s:textfield>的name屬性是user.name和user.age,正好是加了前綴的。

現在重新訪問http://localhost:8080/validation/validate_form.jsp,驗證界面如圖2所示。

 
圖2

經筆者測試,使用visitor無法以客戶端驗證的方式來驗證user屬性,但NewValidateAction中其他的屬性可以使用客戶端測試。

【編輯推薦】

  1. Struts2教程1:***個Struts2程序
  2. Struts2教程2:處理一個form多個submit
  3. Struts2教程3:struts.xml常用配置解析
  4. Struts2教程4:使用validate方法驗證數據
  5. Struts2教程6:在Action類中獲得HttpServletResponse對象
  6. Struts2教程7:上傳任意多個文件
  7. Struts2教程8:攔截器概述
  8. Struts2教程9:實現自已的攔截器
  9. Struts2教程10:國際化
責任編輯:楊鵬飛 來源: BlogJava
相關推薦

2009-06-25 15:37:12

Struts2教程Validation框

2009-06-25 15:33:12

Struts2教程使用validate驗證數據

2009-06-04 11:08:32

struts2 val框架

2009-02-04 12:00:08

2011-03-30 09:03:57

struts2

2009-06-05 09:58:20

struts2驗證用戶注冊

2009-06-25 15:11:28

Struts2教程Struts2程序

2009-02-04 10:51:07

2009-06-03 14:19:34

Struts2Guice

2009-06-25 16:04:30

2009-06-25 15:26:25

Struts2教程struts.xml常

2009-02-04 15:04:13

2009-06-25 15:50:03

Struts2教程上傳任意多個文件

2009-06-25 15:54:42

Struts2教程攔截器

2012-05-10 14:00:06

StrutsjsonJava

2009-02-04 11:37:15

2009-07-29 09:54:34

struts2和str

2009-06-04 09:20:19

struts2 if標使用

2009-02-04 14:00:59

2009-02-04 14:19:38

點贊
收藏

51CTO技術棧公眾號

国产精品亚洲片在线播放| 手机av在线播放| 日韩综合一区二区| 自拍偷拍亚洲在线| 亚洲三级在线视频| 91超碰国产在线| 久久精品欧美一区二区三区不卡 | 成人女人免费毛片| 免费黄色网址在线| 888久久久| 亚洲第一精品夜夜躁人人爽 | 综合日韩av| 中文字幕在线观看不卡视频| 黑人巨大精品欧美一区二区小视频 | 琪琪久久久久日韩精品| 91国偷自产一区二区使用方法| 一区二区三区久久网| 蜜臀av中文字幕| 蜜桃久久久久久| 国内精品一区二区三区| 国产破处视频在线观看| 黄色网一区二区| 在线不卡a资源高清| 无码人妻h动漫| 亚洲小说区图片| 国产精品久久一级| 欧美二区在线| 高h震动喷水双性1v1| 久久精品理论片| 欧美专区中文字幕| 成人免费看片98| 欧美激情国产在线| 亚洲人成网7777777国产| 亚洲精品久久一区二区三区777 | 麻豆影视国产在线观看| 久久综合色天天久久综合图片| 亚洲综合中文字幕68页| 亚洲资源在线播放| 日韩精品乱码免费| 日本午夜在线亚洲.国产| 国产一级aa大片毛片| 国产精品成人一区二区不卡| 国产亚洲精品美女久久久久| 爱爱免费小视频| 女同另类激情重口| 精品国产网站在线观看| 国产精品欧美性爱| 日本一区精品视频| 日韩色在线观看| 性欧美在线视频| 久久伊人国产| 欧美日韩国产中文| 免费av不卡在线| 国产毛片精品久久| 精品视频999| 小泽玛利亚视频在线观看| 日韩欧美精品电影| 在线免费不卡视频| 在线观看亚洲色图| 亚洲国产伊人| 日韩午夜电影av| 色姑娘综合天天| 亚洲国产欧美国产第一区| 日韩欧美激情四射| www男人天堂| 国产欧美自拍一区| 亚洲国产又黄又爽女人高潮的| 国产一卡二卡三卡四卡| 国产精品中文字幕制服诱惑| 亚洲精品成人免费| 亚洲人成人无码网www国产| 亚洲尤物av| 自拍偷拍亚洲欧美| xxxx日本少妇| 亚洲精品影视| 国产成人精品免费久久久久| 欧美在线视频精品| 精品写真视频在线观看| 99国精产品一二二线| 欧美一级免费片| 国产亚洲精品7777| 最新中文字幕久久| 国产理论电影在线| 一本大道久久精品懂色aⅴ| 人人干人人视频| 91精品在线免费视频| 精品国产sm最大网站免费看| 亚洲国产精品自拍视频| 欧美日韩一区二区三区视频播放| 久久在线视频在线| 在线观看黄网站| 久久99国产精品成人| 国产伦精品一区二区三区照片 | 大胆亚洲人体视频| 日本10禁啪啪无遮挡免费一区二区| 国产高清免费在线播放| 亚洲另类色综合网站| 波多野结衣家庭教师视频| 四虎在线精品| 日韩成人av一区| 手机av在线看| 亚洲欧美视频| 97视频资源在线观看| 九九在线视频| 亚洲国产va精品久久久不卡综合| 久久婷婷国产91天堂综合精品| 精品国产乱码久久久久久樱花| 亚洲精品国偷自产在线99热 | 香蕉久久国产av一区二区| 国产日韩av一区二区| 日韩精品一区二区在线视频| 欧美三区四区| 日韩成人小视频| 国产探花在线视频| 久久人人精品| 国产日韩二区| 97影院秋霞午夜在线观看| 欧美午夜激情在线| 国产精品19p| 日韩影院二区| 国产a级全部精品| 日本高清视频免费观看| 亚洲视频一区二区在线观看| 欧美日韩中文在线视频| 黄色欧美网站| 久久久久久高潮国产精品视| 亚洲手机在线观看| 久久精品免费在线观看| 妞干网在线观看视频| 成人在线啊v| 日韩中文字幕第一页| 久久久久女人精品毛片九一| 成人a区在线观看| 精品国产一区二区三区在线| 国产69精品久久| 亚洲系列中文字幕| 亚洲久久在线观看| 不卡视频一二三四| 日韩欧美精品免费| 国产精品日本一区二区不卡视频 | 国产精选在线观看91| 成年人黄视频在线观看| 7878成人国产在线观看| 亚洲一级黄色录像| 日韩经典中文字幕一区| 日韩高清国产一区在线观看| 亚洲天堂资源| 亚洲片在线资源| 免费av中文字幕| 国产三级精品在线| 中文字幕永久视频| 精品亚洲成人| 国产精品亚洲片夜色在线| 成年午夜在线| 欧美日韩在线三区| 大胸美女被爆操| 久久电影国产免费久久电影| 一区二区三区在线观看www| 国产极品嫩模在线观看91精品| 中文字幕亚洲在线| 一级α片免费看刺激高潮视频| 国产精品嫩草影院com| 亚洲人视频在线| 中文在线日韩| 成人av免费电影| 2001个疯子在线观看| 日韩成人在线电影网| 国产免费www| 中文字幕一区二| 精品国产午夜福利在线观看| 亚洲激情在线| 欧洲一区二区日韩在线视频观看免费 | 国产精品久久三区| 久久出品必属精品| 精品69视频一区二区三区Q| 精品国产福利| 视频一区在线免费看| 日日狠狠久久偷偷四色综合免费| 国产白浆在线观看| 黄色成人av在线| 影音先锋男人在线| 国产精品亚洲а∨天堂免在线| 男人天堂a在线| 国产影视一区| 亚洲一区二区三区毛片| 激情黄产视频在线免费观看| 亚洲小视频在线观看| 国产精品视频久久久久久| 亚洲国产精品人人做人人爽| 国内精品卡一卡二卡三| 国产精品亚洲一区二区三区在线| 波多野结衣家庭教师在线| 日韩欧美一区二区三区在线视频 | 精品国产美女| www.一区二区三区| 中文字幕av一区二区三区佐山爱| 免费97视频在线精品国自产拍| 污视频软件在线观看| 欧美日韩在线三区| 日韩精品手机在线| 自拍偷在线精品自拍偷无码专区 | 国语一区二区三区| 国产精品天天狠天天看| av免费在线视| 久久影视电视剧免费网站清宫辞电视 | 青青草成人网| 综合激情网...| 国产欧美一区二区三区久久人妖| 高清视频在线观看三级| 久久久精品视频在线观看| 三级视频网站在线| 日韩视频一区二区三区在线播放| 在线免费一区二区| 五月激情六月综合| 免费人成在线观看| 国产精品乱人伦| 国产 欧美 在线| 成人永久免费视频| 色黄视频免费看| 免费人成精品欧美精品| www.爱色av.com| 伊人精品成人久久综合软件| 97超碰免费观看| 久久在线视频| 色999日韩自偷自拍美女| 欧美成人基地| 国产精品国产三级欧美二区| 精品国产麻豆| 91亚洲国产成人精品性色| 台湾成人免费视频| 国产精品大陆在线观看| 神马久久午夜| 69久久夜色精品国产69| 免费电影网站在线视频观看福利| 久久综合免费视频| 日本美女高清在线观看免费| 伊人久久久久久久久久久| 日本福利片高清在线观看| 亚洲精品国精品久久99热| 人妻夜夜爽天天爽| 精品成人私密视频| 欧美 日韩 人妻 高清 中文| 精品国一区二区三区| av中文字幕在线免费观看| 欧美一区二区黄色| 99久久亚洲精品日本无码| 欧美精品成人一区二区三区四区| 影音先锋黄色网址| 欧美日韩精品一区二区在线播放| 天天射天天干天天| 在线免费av一区| 伊人免费在线观看高清版| 精品视频色一区| 91精品国产乱码久久| 欧美精品18+| a天堂在线视频| 欧美tickling网站挠脚心| 日韩中文字幕免费观看| 亚洲成人在线网| 日本一区视频| 在线观看成人黄色| 1区2区3区在线观看| 久久精品视频免费播放| 91cn在线观看| 91国产中文字幕| 三级成人黄色影院| 国产热re99久久6国产精品| 色婷婷成人网| 电影午夜精品一区二区三区| 另类图片第一页| 日本视频一区二区在线观看| 日韩一区电影| 国产日本在线播放| 国产日韩一区二区三区在线播放| 日本精品一区二区三区四区| 麻豆一区二区在线| 人妻av一区二区三区| 97se亚洲国产综合在线| 欧美日韩国产黄色| 亚洲综合一二区| 久久青青草原亚洲av无码麻豆| 91激情五月电影| www.成人免费视频| 亚洲美女在线视频| 免费在线观看黄| 97婷婷大伊香蕉精品视频| 欧美va在线观看| 91免费在线观看网站| 亚洲福利天堂| 佐佐木明希av| 麻豆9191精品国产| 日韩高清在线一区二区| 2024国产精品视频| 日韩在线观看视频一区二区| 大荫蒂欧美视频另类xxxx| 夜夜嗨aⅴ一区二区三区| 精品国产乱码久久久久久久| 国产日本在线观看| 久久久久女教师免费一区| 天然素人一区二区视频| 国产精品theporn88| 欧美一区二区性| 免费av手机在线观看| 久久av资源站| 精品人妻一区二区三区视频| 亚洲精品水蜜桃| 久草热在线观看| 亚洲福利在线观看| 黄网站app在线观看| 日本亚洲精品在线观看| 风间由美性色一区二区三区四区| 亚洲成人网上| 亚洲在线免费| 污污免费在线观看| 中文字幕综合网| 中文字幕av无码一区二区三区| 亚洲国产欧美一区二区三区久久| 国产淫片在线观看| 国产精品免费看久久久香蕉| 亚洲都市激情| 免费 成 人 黄 色| 国产不卡视频在线播放| 九九热视频在线免费观看| 色一情一伦一子一伦一区| 亚洲欧美日韩动漫| 欧美国产精品va在线观看| 996久久国产精品线观看| 视频一区二区在线观看| 久久成人在线| 性色av蜜臀av色欲av| 亚洲国产精品一区二区www在线| 国产精品伦一区二区三区| 日韩在线视频一区| 成人全视频在线观看在线播放高清| 欧美日本亚洲| 久久av最新网址| 我和岳m愉情xxxⅹ视频| 欧美日韩国产影院| 午夜影院免费视频| 97人人做人人爱| 日韩系列在线| 青青青在线播放| 久久精品人人做| 亚洲免费视频二区| 中文字幕精品网| 韩国理伦片久久电影网| 亚洲不卡1区| 日日夜夜一区二区| 九九九视频在线观看| 在线视频中文字幕一区二区| 激情综合闲人网| 国产欧美日韩丝袜精品一区| 精品大片一区二区| 欧美日韩亚洲自拍| 国产精品另类一区| 国产免费高清av| 欧美极品欧美精品欧美视频 | 精国产品一区二区三区a片| 日韩一区二区三区视频在线 | 日本午夜人人精品| 精品久久久久久久久久久下田| www亚洲成人| 亚洲欧美激情一区二区| www.色日本| 91精品国产色综合久久不卡98口| 老司机凹凸av亚洲导航| 国产免费人做人爱午夜视频| 久久久91精品国产一区二区三区| 中文亚洲av片在线观看| 日韩综合中文字幕| 2020国产精品极品色在线观看| 九一国产精品视频| 久久久99免费| 999av视频| 97婷婷涩涩精品一区| 欧美中文字幕一区二区| 捷克做爰xxxⅹ性视频| 精品久久久久久久中文字幕| 国产无套粉嫩白浆在线2022年 | 精品一区二区男人吃奶| 黄色片视频在线播放| 亚洲色图一区二区| 五月婷婷丁香六月| 国产玖玖精品视频| 狠狠爱综合网| 1024在线看片| 精品成人一区二区三区| 成人精品三级| 91免费国产精品| 国产亚洲美州欧州综合国| 精品黑人一区二区三区在线观看 | 8x8x华人在线| 91片黄在线观看| 国产伦精品一区二区三区视频痴汉| 欧美精品九九久久| 欧美亚洲激情| jjzz黄色片| 欧美日韩亚洲综合| 日本黄色免费在线| 99精品视频网站|