Struts2中的校验器

来源:互联网 发布:2016年网络第一红歌 编辑:程序博客网 时间:2024/04/29 09:43

      输入校验在Web应用中具有重要的作用,因为我们不能保证用户提交给程序的数据都是符合要求的,而如果不符合要求,就会使程序运行出错,所以输入校验是每个结构严谨的应用程序都必须的。

       对于输入校验Struts2提供了两种实现方法:1.手工编写代码实现   2.通过配置XML实现

  1. 

  首先来说说第一种手工编写代码的实现,很简单,只需要在Action中重写方法validate(),代码如下

   /** * 专门用于验证的方法validate,一有错误的时候,则会找到<result>节点的input所映射的路径 */@Overridepublic void validate() {if (user.getName() == null || "".equals(user.getName())) {// 该方法用于保存错误的信息this.addFieldError("user.name", "用户名不能为空"); }if (user.getAge() == null) {// 该方法用于保存错误的信息super.addFieldError("user.age", "年龄不能为空"); }if (user.getSalary() == null) {// 该方法用于保存错误的信息super.addFieldError("user.salary", "工资不能为空"); }if (user.getBirthday() == null) {// 该方法用于保存错误的信息super.addFieldError("user.birthday", "出生日期不能为空"); }}(Action和配置就不写出了)
jsp页面

<%@ page language="java" pageEncoding="GBK"%><%@ taglib prefix="s" uri="/struts-tags"%><html:html lang="true">  <head>    <html:base />     <title>struts2_simple_demo.jsp</title>  </head>    <body>    <s:form action="user.action" method="post">        姓名:<input type="text" name="user.name" value="<s:property value="user.name"/>"/>             <s:property value="fieldErrors['user.name'][0]"/><br>                     年龄:<input type="text" name="user.age" value="<s:property value="user.age"/>"/>             <s:property value="fieldErrors['user.age'][0]"/><br>                     工资:<input type="text" name="user.salary" value="<s:property value="user.salary"/>"/>             <s:property value="fieldErrors['user.salary'][0]"/><br>                     生日:<input type="text" name="user.birthday" value="<s:property value="user.birthday"/>"/>             <s:property value="fieldErrors['user.birthday'][0]"/><br>                      <input type="submit" value="提交"/>         <input type="reset" value="重置"/>    </s:form>  </body></html:html>
以上就是直接使用代码的方法完成校验,但是如果我们在一个企业级应用中,需要用到大量的输入校验。如果全部用编码方式,工程会变得臃肿不堪,难于维护和管理,所以,鉴于此,当有大量的属性需要进行校验的时候,此时使用xml配置来实现不失为一个好方法


 2.

  首先看下Action:(ValidatAction.java)

package com.aheadetp.action;import com.aheadetp.model.User;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven;/** *  * @author xxxx * */// ModelDriven:直接把实体类当成页面数据的收集对象public class ValidatAction extends ActionSupport implements ModelDriven<User>{private User user = new User();@Override/** *  */public String execute() throws Exception {System.out.println("i am execute!");return super.execute();}@Override/** *  */public User getModel() {return user;}/** * @return the user */public User getUser() {return user;}/** * @param user the user to set */public void setUser(User user) {this.user = user;}}
这里为什么要使用ModelDriver,往后在说,或者看下上一篇博文

在Action对应下的包下新建一个xml文件,该文件的命名规则是:Action名-validation.xml(这里的命名是ValidatAction-validation.xml)

<?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="user"><field-validator type="visitor"><!-- 对应于User-userC-validation.xml中的userC --><param name="context">userC</param><!-- 是否在错误信息前添加message的信息作为前缀 --><param name="appendPrefix">true</param><message>用户的:</message></field-validator></field></validators>

POJO类:(User.java)

package com.aheadetp.model;import java.util.Date;public class User {private int age;private String name;private String pass;private String re_pass;private String email;private String url;private Date birth;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPass() {return pass;}public void setPass(String pass) {this.pass = pass;}public String getRe_pass() {return re_pass;}public void setRe_pass(String re_pass) {this.re_pass = re_pass;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public Date getBirth() {return birth;}public void setBirth(Date birth) {this.birth = birth;}}

在该pojo类目录下家里一个xml文件,该文件专门用户校验,命名规则:POJO类名-xxx-validation.xml(User-userC-validation.xml)

<?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="name"><!-- 必填字符串校验器 --><field-validator type="requiredstring"><message><![CDATA[(Name should not be blank!)]]></message></field-validator><!-- 字符串长度校验器 --><field-validator type="stringlength"><param name="maxLength">6</param><param name="minLength">3</param><param name="trim">true</param><message><![CDATA[(Length of the name should between 3 and 6!)]]></message></field-validator></field><field name="re_pass"><!-- 必填字符串校验器 --><field-validator type="requiredstring"><message><![CDATA[(Re_pass should not be blank!)]]></message></field-validator><!-- 字段表达式校验器 --><field-validator type="fieldexpression"><param name="expression">re_pass.equals(pass)</param><message><![CDATA[(Pass should be same as re_pass!)]]></message></field-validator></field><field name="age"><!-- 必填校验器 --><field-validator type="required"><message><![CDATA[(Age should not be blank!)]]></message></field-validator><!-- 整数校验器 --><field-validator type="int"><param name="max">150</param><param name="min">1</param><message><![CDATA[(Age should be between 1 and 150!)]]></message></field-validator></field><field name="email"><!-- 必填整数校验器 --><field-validator type="requiredstring"><message><![CDATA[(Email should not be blank!)]]></message></field-validator><!-- 电子邮件校验器 --><field-validator type="email"><message><![CDATA[(The pattern of the Email is not good!)]]></message></field-validator></field><field name="url"><field-validator type="requiredstring"><message><![CDATA[(URL should not be blank!)]]></message></field-validator><!-- 网址校验器 --><field-validator type="url"><message><![CDATA[(The pattern of the URL is not good!)]]></message></field-validator></field><field name="birth"><field-validator type="required"><message><![CDATA[(birth should not be blank!)]]></message></field-validator><!-- 日期校验器 --><field-validator type="date"><param name="max">2013-5-27</param><param name="min">1999-10-1</param><message><![CDATA[(birth should before 2013-5-27 And after 1999-10-1!)]]></message></field-validator></field></validators>

此种类型也成为字段校验器,好了在来看看前台页面吧

index.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@ taglib prefix="s" uri="/struts-tags"%><%@ taglib prefix="sx" uri="/struts-dojo-tags" %><%String path = request.getContextPath();String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>Convert Error</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"><sx:head/></head><body><s:fielderror/><s:form action="valid"><s:textfield name="name" label="姓名" tabindex="1"/><s:password name="pass" label="密码" tabindex="2"/><s:password name="re_pass" label="确认密码" tabindex="3"/><s:textfield name="age" label="年龄" tabindex="4"/><sx:datetimepicker type="date" name="birth" label="生日" tabindex="5"/><s:textfield name="email" label="Email" tabindex="6"/><s:textfield name="url" label="URL" tabindex="7"/><s:submit></s:submit></s:form></body></html>

以上就基本上是一个校验器的知识,也有许多没涉及进去,后续会继续追加!^_^


   


原创粉丝点击