首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Struts2(六):Struts2的输入校验2

2012-09-17 
Struts2(6):Struts2的输入校验2遇到类型转换错误的时候(也就是说不能进行类型转换),struts2框架自动生成一

Struts2(6):Struts2的输入校验2

遇到类型转换错误的时候(也就是说不能进行类型转换),struts2框架自动生成一条错误信息,并且将该错误信息放到addFieldError里面

类型转换与输入校验的流程

1. 首先Struts2对客户端传来的数据进行类型转换

2. 类型转换完毕后再进行输入校验

3. 如果类型转换和输入校验都没有错误发生,那么进入execute方法(调用商业逻辑)

注意:如果类型转换不成功,也同样要进行输入校验

1,新建一个register2.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%><%@ taglib prefix="s" uri="/struts-tags" %><html>  <body>  <table>  <s:fielderror/>  <s:form action ="register2">  <s:textfield name="username" label="username"></s:textfield>  <s:password name="password" label="password"></s:password>  <s:password name="repassword" label="repassword"></s:password>  <s:textfield name="age" label="age"></s:textfield>  <s:textfield name="birthday" label="birthday"></s:textfield>  <s:textfield name="graduation" label="graduation"></s:textfield>  <s:submit value="submit"></s:submit>  </s:form>  </table>  </body></html>

?2,struts.xml配置如下

<action name="register2" name="code">package com.test.action;import java.sql.Date;import java.util.Calendar;import com.opensymphony.xwork2.ActionSupport;public class RegisterAction2 extends ActionSupport {private String username;private String password;private String repassword;private int age;private Date birthday;private Date graduation;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;}public String getRepassword() {return repassword;}public void setRepassword(String repassword) {this.repassword = repassword;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public Date getGraduation() {return graduation;}public void setGraduation(Date graduation) {this.graduation = graduation;}public String execute() throws Exception {System.out.println("execute.....");return SUCCESS;}public void validate() {System.out.println("validate .......");if(age < 0){this.addActionError( "your age is error.action error");}if(null == username || username.equals("")){this.addActionError("please input your username ,action error");}if(null == password || null == repassword || !password.equals(repassword)){this.addActionError("your password is invalid ,action error");}if(null != birthday && null != graduation){Calendar c1 =Calendar.getInstance();c1.setTime(birthday);Calendar c2 =Calendar.getInstance();c2.setTime(graduation);if(c1.after(c2)){this.addActionError("birthday should be before graduation");}}}}

?4,可以在action中指定方法,如

<action name="register2" method="abc"><result name="success">/success.jsp</result><result name="input">/register2.jsp</result></action>

?在程序执行到RegisterAction2时,会去执行abc方法 ,不再去执行execute,但会继续调用validate方法进行输入校验。也可以为abc编写专用的校验方法validateAbc,注意:执行完专用的validateAbc后,struts2仍然会执行validate方法,如果想不执行,可以将validate改名为validateExecute。那么只有在执行execute时,才会执行validateExecute。

热点排行