Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 513|回复: 0

[struts学习]struts2中的数据校验

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-11 03:05:04 | 显示全部楼层 |阅读模式
    一. ActionSupport是个工具类,他实现了Action, Validatable等接口, Validatable提供validate()方法进行数据验证.Action只要继承ActionSupport类,重写validate()方法就可以进行数据验证 二. 校验的流程
          首先,Struts框架对输入数据进行类型转换,然后再进行数据校验,如果类型转换与数据校验都没有错误发生, 就进入execute(),否则请求将被转发到input视图 三. 注册实例
         首先新建RegistAcion.java package com;
    import java.util.Date;
    import com.opensymphony.xwork2.ActionSupport;
    public class RegistAction extends ActionSupport {
            private String userName;
                   
            private Integer age;
           
            private Date birthday;
           
            public String getUserName() {
                    return userName;
            }
            public void setUserName(String userName) {
                    this.userName = userName;
            }
            public Integer getAge() {
                    return age;
            }
            public void setAge(Integer age) {
                    this.age = age;
            }
            public Date getBirthday() {
                    return birthday;
            }
            public void setBirthday(Date birthday) {
                    this.birthday = birthday;
            }
            @Override
            public String execute() throws Exception {
                    System.out.println("注册成功");
                    return SUCCESS;
            }
            @Override
            public void validate() {
                    if("".equals(userName)){
                            addFieldError("userName", "username is empty");
                    }
                    if(null != age){
                            if(1 > age || 150 < age){
                                    addFieldError("age", "age invalid");
                            }
                    }
            }
    }[/code]  配置Action <action name="regist" class="com.RegistAction">
          <result name="success">/welcome.jsp</result>
          <result name="input">/regist.jsp</result>
    </action>[/code]  接着是注册页面和注册成功页面 regist.jsp <body>
              <form action="regist.action" method="post">
                      <s:fielderror></s:fielderror>
                      <table><tr>
                                      <td>userName:</td>
                                      <td>
                                              <input type="text" name="userName">
                                      </td>
                              </tr>
                              <tr>
                                      <td>age:</td>
                                      <td>
                                              <input type="text" name="age">
                                      </td>
                              </tr>
                              <tr>
                                      <td>birthday:</td>
                                      <td>
                                              <input type="text" name="birthday">
                                      </td>
                              </tr>
                              <tr>
                                      <td colspan="2">
                                              <s:submit value="注册"></s:submit>
                                      </td>
                              </tr>
               </form>
      </body>[/code]  如果不输入userName, age输入为abc,会提示
      Invalid field value for field "age".
      username is empty  1. 其中Invalid field value for field "age" 信息是struts2通过内置的类型转换器进行类型转换时,如果不能成功转换, struts2框架自动生成一条错误信息,并将该错误信息放到addFieldError里面,这种默认的输出信息格式是在  xwork-2.0.4.jar中定义的.  com/opensymphony/xwork2/xwork-messages.properties文件中有一条xwork.default.invalid.fieldvalue=Invalid field value for field "{0}". 2. 这是一种全局的错误提示方式,整个系统中只要是字段类型转换错误都会这样提示,我们也可以改变这种输出格式,只要在全局的国际资源文件中重写xwork.default.invalid.fieldvalue就可以了. 实现方式:
    在struts.xml中加入<constant name="struts.custom.i18n.resources" value="messageResource"></constant>
    或者也可以在struts.properties中加入struts.custom.i18n.resources=messageResource
    指定国际化资源文件名为messageResource. Properties 新建messageResource. Properties资源文件并添加数据xwork.default.invalid.fieldvalue={0} failure
    修改之后字段类型转换错误提示为 : {0} failure 3 所有的类型转换失败后,struts2会将基本类型设置为0,对象类型设置为null,这里的age的类型为Integer,当类型转换失败age值为null,如果age的类型为int,那么转换失败后值为0  4.这种提示信息不够友好,也可以定义局布的提示信息,为每一个Action新建一个properties文件,文件名为XXX.properties(Action名.properties) 实现方式:新建RegistAction.properties并添加
    invalid.fieldvalue.age=age error
    invalid.fieldvalue.birthday=birthday error
    其中age和birthday分别为字段的名称

    四.
    Struts2也提供类似BaseDispatchAction的功能 package com;
    import com.opensymphony.xwork2.ActionSupport;
    public class Regist2Action extends ActionSupport {
            private String userName;
                   
            public String getUserName() {
                    return userName;
            }
            public void setUserName(String userName) {
                    this.userName = userName;
            }
            public String regist() throws Exception {
                    System.out.println("注册成功-regist");
                    return SUCCESS;
            }
           
            public void validateRegist() {
                    if(userName.equals("")){
                            addFieldError("userName", "请输入用户名-registValidate");
                    }
            }
    }[/code]   <action name="regist2" class="com.Regist2Action" method="regist">
          <result name="success">/welcome.jsp</result>
          <result name="input">/regist2.jsp</result>
        </action> 指定了method为regist,当请求时会执行regist(),不会再去执行默认的execute()方法了,
    validateRegist()方法是专门针对regist校验的.(格式为validate+方法名)

      
      
       
       

         
       

         
       
      
    复制代码

    源码下载:http://www.hnzz3z.com:8103/zz3zcwb/cwb/dir2/strutsV.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 13:22 , Processed in 0.291686 second(s), 36 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表