Struts数据效验

来源:互联网 发布:java入门教程视频 编辑:程序博客网 时间:2024/06/06 00:16
表单数据的验证:    前台验证:主要是通过JS验证, 表达数据是否合法!    后台验证:通过后台java代码进行验证!          Struts也提供了数据效验的方式!Struts数据效验, 通过拦截器完成:    <interceptor         name="validation"           class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>

代码方式验证Action中所有的方法

步骤:    1. 搭建struts环境    2. login.jsp    3.UserAction.java

Struts数据效验错误信息处理

public synchronized void addFieldError(String fieldName, String errorMessage) {        // 1. 保存错误信息的map集合        final Map<String, List<String>> errors = internalGetFieldErrors();        // 2. Map的value值  (一个key,对应的多个值用list存储)        List<String> thisFieldErrors = errors.get(fieldName);        // 3. 如果错误信息的map中没有当前的key,就直接创建集合        if (thisFieldErrors == null) {            // 创建            thisFieldErrors = new ArrayList<String>();            errors.put(fieldName, thisFieldErrors);        }         // 4. 添加错误信息        thisFieldErrors.add(errorMessage);    }

Action实现

/** * 注意:如果要想用struts的数据效验功能,必须继承ActionSupport或实现相关接口 */public class UserAction extends ActionSupport {    // 封装请求数据    private User user = new User();    public void setUser(User user) {        this.user = user;    }    public User getUser() {        return user;    }    // 重写数据验证的方法    @Override    public void validate() {        // 用户名非空        if (user.getUserName() == null || "".equals(user.getUserName())) {            // 保存错误信息            super.addFieldError("userName", "用户名必须填写!");        }        // 密码        if (user.getPwd() == null || "".equals(user.getPwd())) {            super.addFieldError("pwd", "密码必填");        }    }}

代码方式验证Action中指定的方法

写验证方法命名规则:    validate + 要验证的方法名如:    public void validateRegister() {    只会验证当前action的register方法!

XML方式验证Action中所有的方法

总结代码方式验证:    繁琐,设计很多重复的验证逻辑!例如:非空验证、数值验证、email、日期等。    Struts对于常用的验证,进行了封装,即提供了验证器, 验证指定的常用业务逻辑!

Struts提供的所有验证器

路径:xwork-core-2.3.4.1.jar/com.opensymphony.xwork2.validator.validators/default.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC        "-//Apache Struts//XWork Validator Definition 1.0//EN"        "http://struts.apache.org/dtds/xwork-validator-definition-1.0.dtd"><!-- START SNIPPET: validators-default --><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"/></validators><!--  END SNIPPET: validators-default -->
如果写xml,从而定义验证规则:    1)XML文件名称语法: ActionClassName-validation.xml        注意:此xml需要与当期要验证的action在同一个目录:        举例:UserAction-validation.xml    2) 写XML
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE validators PUBLIC        "-//Apache Struts//XWork Validator 1.0.3//EN"        "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"><validators>    <!-- 验证的每一个字段用field表示 -->    <field name="user.userName">        <!-- 指定使用的验证器 -->        <field-validator type="requiredstring">            <!-- 验证失败的错误提示信息 -->            <message>用户名不能为空!</message>        </field-validator>    </field>    <!-- 验证pwd -->    <field name="user.pwd">        <!-- 非空 -->        <field-validator type="requiredstring">            <message>密码不能为空!</message>        </field-validator>        <!-- 长度 -->        <field-validator type="stringlength">            <param name="minLength">6</param>            <param name="maxLength">8</param>            <message>密码必须为6-8位!</message>        </field-validator>    </field>    <!-- 验证日期 -->    <field name="user.birth">        <field-validator type="date">            <message>日期格式不对!</message>        </field-validator>    </field>    <!-- 验证Email -->    <field name="user.email">        <field-validator type="email">            <message>邮箱格式错误!</message>        </field-validator>    </field></validators>       

XML方式验证Action中指定的方法

与上面xml验证方式大致相同: 验证xml文件内容不变;文件命名:    语法:ActionClassName-ActionName-validation.xml    举例:UserAction-user_register-validation.xml          验证UserAction中的register方法

验证总结

    代码:        重写validate()   ,  验证action所有方法         Validate方法名(),  验证指定“方法名”的方法    Xml:        验证所有方法: ActionClassName-validation.xml        验证指定方法: ActionClassName-actionName-validation.xml    代码验证,        比较灵活,可以满足所有的需求.        比较繁琐,要写重复的验证判断逻辑!        适合: 表单字段较少的情况用!    XML验证:        通用,但不够灵活; 可以验证特定简单的业务。        适合: 验证表单字段较多,可以大大简化代码!              (配置文件过多)

验证错误处理

Struts在进行数据效验的时候,验证失败,会返回input视图,要求我们要在struts.xml中配置input视图对应的错误页面!

配置

Struts.xml<!-- 注册失败跳转到注册页面,显示失败信息 --><global-results>    <result name="input">/register.jsp</result></global-results>

Jsp显示错误

  • 方式1:显示所有错误
<%@taglib uri="/struts-tags" prefix="s" %>    <!-- 显示的是struts在运行时期产生的所有错误 -->    <s:fielderror></s:fielderror>
  • 方式2:显示指定的错误
<!-- 修改struts标签默认的样式: 不让换行 -->     <style type="text/css">    ul{        display: inline;    }    ul li{        display: inline;        color: red;    }    </style><!-- 显示指定的错误--><s:fielderror fieldName="user.userName"></s:fielderror>
  • 方式3: 修改标签定义的模板

    找到fielderror标签定义的模板文件:Struts-core.jar\template\simple\ fielderror.ftl把修改后的fielderror.ftl文件,放到src/ template/ simple/ fielderror.ftl
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 卖家收到好评内容是差评怎么办 淘宝收货电话写错了怎么办 淘宝评价写错了怎么办 饿了么商家差评怎么办 淘宝不给补差价怎么办 淘宝顾客给差评怎么办 淘宝买家账号体检违规怎么办 买家淘宝账户体检中心违规怎么办 淘宝卖家电话骚扰该怎么办 手机欠费销户了怎么办 想下载好多个淘宝怎么办 送快递不记得路怎么办 淘宝物流弄丢了怎么办 邮政快递碰上难缠客户怎么办 举证工伤对方不签收怎么办 快递员收件的钱怎么办 锐捷网卡是空的怎么办 mac系统excel太慢怎么办 二手车交易发票丢了怎么办 转转上买二手电脑被骗了怎么办 如果电脑买贵了怎么办 电脑配置低玩lol卡怎么办 电视打开显示无信号怎么办 电脑卡怎么办换个驱动 刚开始开淘宝店没人买怎么办 公司有人带自己电脑办公怎么办 组装电脑连不上网怎么办 显卡玩不起吃鸡怎么办 u盘内存是假的怎么办 新买的电脑应该怎么办 海尔一体机电脑开不开机怎么办 苹果笔记本系统坏了怎么办 苹果笔记本电脑电池坏了怎么办 苹果笔记本电脑屏幕坏了怎么办 平板开关键坏了怎么办 平板电脑电池坏了怎么办 平板电脑充电口坏了怎么办 平板电脑系统坏了怎么办 平板电脑充电器坏了怎么办 平板电脑触摸屏坏了怎么办 平板电脑关不了机怎么办