Struts 常用验证
来源:互联网 发布:淘宝店导航装修视频 编辑:程序博客网 时间:2024/06/06 21:06
一、struts2.0的输入验证: A、手动验证:1)重写validate()2)重写validateXxx() B、使用验证框架 Action类都要继承ActionSupport类二、为一个Action设置多个逻辑处理: 为了更具有针对性的处理业务逻辑与针对性的进行输入校验,可以采用指定业务逻辑处理方法的方法,即对同一个Action设置多个逻辑处理方法,也就是说对于某个表单,我们可以指定在Action中让哪个方法来处理它的相关业务 解决方法:struts.xml中通过method属性指定处理其逻辑的方法 例如:LoginAction中有login()和regester()两个业务处理方法:<action name="login" class="com.oristnad.login.LoginAction" method="login"><action name="reg" class="com.oristnad.login.LoginAction" method="regist">A、如果重写了ActionSupport的validate()方法,则该方法会校验所有的处理逻辑。 B、为了实现校验指定逻辑方法,可以在Action中增加一个validateXxx()方法,其中Xxx即是Action对应的处理逻辑方法。同时不重写validate方法 例如: validateRegist()方法---专门校验regist()方法,即校验reg表单提交的内容 validateLogin()---专门校验login()方法,即校验login表单提交的内容 三、struts2的输入校验流程:1)、类型转换器负责对字符串的请求参数执行类型装换,并将这些值设置为Action的属性值 2)、在类型转换过程中如果出现异常,则将异常信息保存到ActionContext中,conversionError拦截器负责将其封装到fieldError里,然后执行第3步;如果没有异常,则直接进入第3步 3)、如果有validateXxx()方法,则调用该方法 4)、调用Action类中的validate()方法 5)、如果经过上面4步都没有出现fieldError,将调用Action里处理用户请求的处理方法; 如果出现了fieldError,将转入input逻辑视图所指定的视图资源。 四、struts2的验证框架初步: 只需要为Action指定一个校验文件即可,该文件指定了Action的属性必须满足怎样的规则。每个Action都有一个校验文件,命名规则:Action名字-validation.xml;该文件保存在与该Action类的相同路径下。1、配置文件: <?xml version="1.0" encoding="GBK"?><!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator1.0.2//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"><validators> <field name="username"> <field-validator type="requiredstring"> <param name="trim">true</param> <message>用户名不能为空</message> </field-validator> </field> <field name="passwd"> <field-validator type="requiredstring"> <message key="error.password"></message> </field-validator> </field></validators> 1)<field name="username">--要验证的字段2)<field-validator type="requiredstring">--验证规则(校验器)3)<param name="trim">true</param>--校验参数4)<message>用户名不能为空</message>--验证失败的输出信息2、配置文件中使用国际化显示错误信息: A、message元素的key属性:<message key="error.password"></message>B、使用${getText("message-key")}: <message>${getText("error.username")}</message>3、客户端验证: 在<s:form>表单中添加validate="true"即可,struts2客户端验证仍是基于JavaScript的,struts2将服务器验证转为客户端验证。 <s:form action="login" validate="true"> 注意: A、如果验证文件中错误信息使用<message key="error.password"></message>形式输出的话,则页面会出现FreeMarker template error!的错误。 故必须使用${getText("message-key")}形式 B、不是所有的服务器端验证都可以转为客户端验证 4、校验器的配置风格: 1)字段校验器:字段优先字段的校验遵循以下规则: <validators><field name="被校验的字段名"> <field-validator type="校验器名"> <param name="参数名">参数值</param> <message>校验失败的提示信息</message></field-validator></field> </validators> 2)非字段校验器配置风格:校验器优先<validators> <validator type="校验器"> <param name="fieldName">需要被校验的字段</param> <param name="参数">参数值</param> <message>校验失败的提示信息</message> </validator></validators> 4.密码验证 <field-validator type="fieldexpression"> <param name="expression"><![CDATA[(t1==t)]]></param> <message>妈妈不一致</message> </field-validator> </field> <validator type="fieldexpression"> <param name="t1">t</param> <param name="expression"><![CDATA[(t1==t)]]></param> <message>密码不一致!</message> </validator>5、常用的校验器:required--必填校验器requiredstring--必填字符串校验器int--整数校验器double--双精度校验器date--日期校验器expression--表达式校验器email--电子邮件校验器url--网址校验器stringlength--字符串长度校验器regex--正则表达式校验器 Struts2 验证框架不起作用的几种可能1、命名是否符合约定:<actionClass>-validation.xml <actionClass>-<actionAlias>-validation.xml 2. validation.xml的标签是否正确。3. fieldName 命名是否和jsp以及 action中的属性一致 4.检查是否在同一个field里面配置了重复的参数,重复的参数也可能会使你的信息显示不出来5、有可能是版本问题,今天用2.1.16的版本做了很久都不起作用,最后改成2.0.14版本,问题解决。Demo(1)配置文件Struts.xml <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts> <package name="com" namespace="/" extends="struts-default"> <action name="User" class="com.lyh.struts2.User"> <result name="success">/result.jsp</result> <result name="input">/index.jsp</result> </action> </package></struts> (2)User Action类 package com.lyh.struts2;import com.opensymphony.xwork2.ActionSupport;import java.util.*;public class User extends ActionSupport { private String userName; //用户名 private String password; //密码 private String name; //名字 private String sex; //性别 private int age; //年龄 private Date birthday; //生日 private String email; //电邮 private String mainPage; //个人主页 private String country; //所在国家 private String description; //描述 private List<String> sports = new ArrayList<String>(); //喜欢的运动 public String execute() throws Exception { System.out.println("Age=" + getAge()); System.out.println("Birthday" + birthday); sports = getSports(); for (String sport : sports) { System.out.println(sport); } if ((sex == null) || sex.equals("")) { addFieldError("sex", "sex is not null"); return INPUT; } return SUCCESS;}―――get/set方法} (3)验证规则文件User-validation.xml <!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="userName"> <field-validator type="requiredstring"> <message key="requiredstring"/> </field-validator> <field-validator type="stringlength"> <param name="fieldName">userName</param> <param name="minLength">6</param> <param name="maxLength">10</param> <param name="trim">true</param> <message key="stringlengthmessage"/> </field-validator> <field-validator type="regex"> <param name="fieldName">userName</param> <param name="expression">[A-Za-z0-9]+</param> <message key="regexmessage"/> </field-validator> </field> <field name="name"> <field-validator type="requiredstring"> <message key="requiredstring"/> </field-validator> <field-validator type="regex"> <param name="fieldName">name</param> <param name="expression">[a-zA-Z]+</param> <message key="nameregexmessage"/> </field-validator> </field> <field name="age"> <field-validator type="int"> <param name="min">1</param> <param name="max">120</param> <message key="agemessage"/> </field-validator> </field> <field name="email"> <field-validator type="email"> <param name="fieldName">email</param> <message key="emailmessage"/> </field-validator> </field> <validator type="url"> <param name="fieldName">mainPage</param> <message key="mainpagemessage"/> </validator> <field name="birthday"> <field-validator type="date"> <param name="min">1980-01-01</param> <param name="max">2007-07-29</param> <message key="birthdaymessage"/> </field-validator> </field></validators> (4)package.properties属性文件 requiredstring=This field is required!stringlengthmessage=userName must be between ${minLength}and${maxLength} needs to be 6-8 characters long !regexmessage=The userName must be character and number!nameregexmessage=name must be all character!agemessage=Age must be in range ${min} and ${max}emailmessage=Must provide a valid email!mainpagemessage=Invalid homepage urlbirthdaymessage=Birthday must be within ${min} and ${max} (5)index.jsp页面 <%@ page contentType="text/html;charset=UTF-8" language="java"%><%@ taglib prefix="s" uri="/struts-tags"%><html> <head> <title>Struts2 Validation Application!</title> <s:head theme="ajax" /> </head> <body> This is a Validate Application! <hr> <s:fielderror /> <s:form action="User.action" method="POST"> <s:textfield key="userName" label="UserName" /> <br> <s:password key="password" label="Password" /> <s:textfield key="name" label="Name" /> <s:radio label="Sex" list="{'Male','Female'}" key="sex" /> <s:textfield label="Age" key="age" value="18" /> <s:checkboxlist list="{'football','basketball','pingpang'}" label="Sports" key="sports" /> <s:textfield label="Email" key="email" value="abc@yahoo.com.cn" /> <s:textfield label="Main Page" key="mainPage" value="http://" /> <s:datetimepicker key="birthday" label="Birthday" toggleType="explode" toggleDuration="500" value="2007-08-29" /> <s:select list="{'China','American','Japenese'}" label="Select Country" headerKey="1" headerValue="-- Please Select --" key="country" /> <s:textarea key="description" label="Description" rows="8" cols="20" /> <s:submit /> <s:reset form now... Press OK to continue!');" /> </s:form> <hr> This Example from<a href="http://hi.baidu.com/vsandjava">[url]http://hi.baidu.com/vsandjava</a>[/url] </body></html> (6)result.jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib prefix="s" uri="/struts-tags" %><html><head> <title> Simple jsp page </title></head><body><center><h7><b>This is Result!</b></h7></center><br><center> userName:<s:property value="userName"/> <br> Password:<s:property value="password"/> <br> Sex:<s:property value="sex"/> <br> Name:<s:property value="name"/> <br> Age:<s:property value="age"/> <br> Sports:<s:property value="sports"/> <br> Birthday:<s:property value="birthday"/> <br> Country:<s:property value="country"/> <br> Email:<s:property value="email"/> <br> MainPage:<s:property value="mainPage"/> <br> Description:<s:property value="description"/> <br></center></body></html><?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee [url]http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd[/url]" version="2.5"> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app> (7)web.xml <System.Web> <httpRuntime maxRequestLength="10240" /> </System.Web>