利用Struts2实现校验功能

Struts2内置的拦截器为我们提供了一系列的功能,其中就有校验功能。利用Struts2完成校验功能的具体步骤如下(以注册为例):
第一步:编写jsp页面register.jsp:
<s:form action="registerAction4">
      <hr />
      <s:actionerror />
      <s:textfield name="email" label="邮箱" style="width:200px" />
      <s:textfield name="loginName" label="登录名称" style="width:200px" />
      <s:textfield name="showName" label="显示名称" style="width:200px" />
      <s:password name="password" label="密码" style="width:200px" />
      <s:password name="confirmPassword" label="确认密码" style="width:200px" />
      <s:textfield name="birthday" label="出生日期" style="width:200px"/>
      <s:textfield name="age" label="年龄" style="width:200px" />
      <s:textfield name="salary" label="月薪" style="width:200px" />
      <s:textfield name="blog" label="博客地址" style="width:200px" />
      <s:textfield name="idcard" label="身份证" style="width:200px" />
      <s:submit value="注册" style="width:80px" />
    </s:form>

第二步:写action部分代码:

package com.hp.lwq.action;

import java.util.Date;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class RegisterAction4 extends ActionSupport {
private static final long serialVersionUID = 1L;

private String email;
private String loginName;
private String showName;
private String password;
private String confirmPassword;
private Date birthday;
private Short age;
private Double salary;
private String blog;
private String idcard;


public String getEmail() {
return this.email;
}

public void setEmail(String email) {
this.email = email;
}

public String getLoginName() {
return this.loginName;
}

public void setLoginName(String loginName) {
this.loginName = loginName;
}

public String getShowName() {
return this.showName;
}

public void setShowName(String showName) {
this.showName = showName;
}

public String getPassword() {
return this.password;
}

public void setPassword(String password) {
this.password = password;
}

public String getConfirmPassword() {
return this.confirmPassword;
}

public void setConfirmPassword(String confirmPassword) {
this.confirmPassword = confirmPassword;
}

public Date getBirthday() {
return this.birthday;
}

public void setBirthday(Date birthday) {
this.birthday = birthday;
}

public Short getAge() {
return this.age;
}

public void setAge(Short age) {
this.age = age;
}

public Double getSalary() {
return this.salary;
}

public void setSalary(Double salary) {
this.salary = salary;
}

public String getBlog() {
return this.blog;
}

public void setBlog(String blog) {
this.blog = blog;
}



public String getIdcard() {
return idcard;
}

public void setIdcard(String idcard) {
this.idcard = idcard;
}

@Override
public String execute() throws Exception {
// 其他业务逻辑代码
if(doSomething()) {
ActionContext.getContext().put("tip", "注册成功!");
return SUCCESS;
} else {
ActionContext.getContext().put("tip", "注册失败!");
return ERROR;
}
}

// 处理业务其他逻辑代码
private Boolean doSomething() {
return true;
}
}


第三步:写一个xml文件名字与action类的相对应RegisterAction4-validation.xml,并在xml文件中配置拦截的字段:
<validators>
<!-- 对email的验证 -->
<field name="email">
<field-validator type="email">

<message>输入的email的格式不正确</message>
</field-validator>
</field>

<!-- 对loginName的验证 -->
<field name="loginName">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>登录的用户名不能为空</message>
</field-validator>

</field>

<!-- 对showName的验证 -->
<field name="showName">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>显示名不能為空</message>
</field-validator>
<field-validator type="stringlength">
<param name="maxLength">15</param>
<param name="minLength">3</param>
<param name="trim">true</param>
<message>显示的名字必须在3~15之间</message>
</field-validator>
</field>

<!-- 对password的验证 -->
<field name="password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>密碼不能為空</message>
</field-validator>

<field-validator type="stringlength">
<param name="maxLength">15</param>
<param name="minLength">6</param>
<param name="trim">true</param>
<message>密码必须在6~15之间</message>
</field-validator>

</field>

<!-- 对confirmPassword的验证 -->
<field name="confirmPassword">
<field-validator type="fieldexpression">
<param name="expression">password==confirmPassword</param>
<message>密码和确认密码必须一致</message>
</field-validator>
</field>


<!-- 对 birthday的验证 -->
<field name="birthday">
<field-validator type="date">
<param name="max">2015-10-30</param>
<message>出生日期必须在2015-10-30之前</message>
</field-validator>
</field>

<!-- 对age校验 -->
<field name="age">
<field-validator type="short">
<param name="min">1</param>
<param name="max">150</param>
<param name="trim">true</param>
<message>年龄必须在1~150之间</message>
</field-validator>
</field>


<!-- 对salary的验证 -->
<field name="salary">
<field-validator type="conversion">
<param name="repopulateField"></param>
<message>输入的薪水值不正确</message>
</field-validator>
</field>

<!-- 对blog的验证 -->
<field name="blog">
<field-validator type="url">
<message>输入的博客地址不正确</message>
</field-validator>
</field>
<!-- 对身份证的验证 -->
<field name="idcard">
<field-validator type="idcard">
<message>输入的身份证号码不正确</message>
</field-validator>
</field>

</validators>
注:其中最后一个字段对身份证的验证要写另一个action(因为此处是自定义校验),具体代码如下:
package com.hp.lwq.validators;

import com.opensymphony.xwork2.validator.ValidationException;
import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport;

public class IDCardFieldValidator extends FieldValidatorSupport {

@Override
public void validate(Object arg0) throws ValidationException {
//获得字段的名字
String fieldName=getFieldName();
//根据字段的名字获取字段的值
String fieldValue=(String) getFieldValue(fieldName, arg0);
//如果输入的为空直接返回,不进去验证
if(fieldName==null || fieldValue.length()==0){
return ;
}

//如果字符串的长度不是18,校验出错
if(fieldValue.length()!=18){
addFieldError(fieldName, arg0);
return ;
}
//去的身份证的前17位信息
String idCardInfo=fieldValue.substring(0, 17);
//取得身份证的第18位信息,这一位 为身份证的校验码
String idCardCheckCode=fieldValue.substring(17, 18);
int []factor={7,8,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
//校验码
String verifyCode="10X98765432";
int sum=0;
try {
for(int i=0;i<17;i++){
sum+=Integer.parseInt(idCardInfo.substring(i, i+1))*factor[i];
}
} catch (Exception e) {
addFieldError(fieldName, arg0);
}
//根据前17位的身份信息和各位的权重以及校验码,计算出身份证信息的校验码
String computeIDCardCheckCode=verifyCode.substring(sum%11, sum%11+1);
//如果所得的校验码与用户输入的身份证信息的校验码不同,则校验失败
if(!idCardCheckCode.equalsIgnoreCase(computeIDCardCheckCode)){
addFieldError(fieldName, arg0);
}
}

}

第四步:因为用到了自定义校验,所以要创建一个validators.xml文件,内容为struts2验证的默认内容,但需要把自己定义的校验加入:

<validators>
    <validator name="required" class="com.opensymphony.xwork2.validator.validators.RequiredFieldValidator"/>
    <validator name="requiredstring" class="com.opensymphony.xwork2.validator.validators.RequiredStringValidator"/>
    <validator name="int" class="com.opensymphony.xwork2.validator.validators.IntRangeFieldValidator"/>
    <validator name="long" class="com.opensymphony.xwork2.validator.validators.LongRangeFieldValidator"/>
    <validator name="short" class="com.opensymphony.xwork2.validator.validators.ShortRangeFieldValidator"/>
    <validator name="double" class="com.opensymphony.xwork2.validator.validators.DoubleRangeFieldValidator"/>
    <validator name="date" class="com.opensymphony.xwork2.validator.validators.DateRangeFieldValidator"/>
    <validator name="expression" class="com.opensymphony.xwork2.validator.validators.ExpressionValidator"/>
    <validator name="fieldexpression" class="com.opensymphony.xwork2.validator.validators.FieldExpressionValidator"/>
    <validator name="email" class="com.opensymphony.xwork2.validator.validators.EmailValidator"/>
    <validator name="url" class="com.opensymphony.xwork2.validator.validators.URLValidator"/>
    <validator name="visitor" class="com.opensymphony.xwork2.validator.validators.VisitorFieldValidator"/>
    <validator name="conversion" class="com.opensymphony.xwork2.validator.validators.ConversionErrorFieldValidator"/>
    <validator name="stringlength" class="com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator"/>
    <validator name="regex" class="com.opensymphony.xwork2.validator.validators.RegexFieldValidator"/>
    <validator name="conditionalvisitor" class="com.opensymphony.xwork2.validator.validators.ConditionalVisitorFieldValidator"/>
    <validator name="idcard" class="com.hp.lwq.validators.IDCardFieldValidator"/>
   
</validators>




第五步:配置struts.xml文件:

<action name="registerAction4" class="com.hp.lwq.action.RegisterAction4">
<result name="input">/register/register.jsp</result>
<result name="success">/register/registerResult.jsp</result>
<result name="error">/register/registerResult.jsp</result>
</action>

猜你喜欢

转载自1960370817.iteye.com/blog/2252728
今日推荐