zoukankan      html  css  js  c++  java
  • Struts2(三)struts2处理请求参数及其校验

    一、Action处理请求参数
    1.Action处理请求参数三种方式
      1.1.Action 本身作为model对象,通过成员setter封装 (属性驱动 
    // 页面:
            用户名  <input type="text" name="username" /> <br/>
    // Action : 
            public class RegistAction1 extends ActionSupport {
                private String username;
                public void setUsername(String username) {
                    this.username = username;
                }
            }
     缺点:需要单独定义javaBean,将action中属性copy到javaBean中。 
        优点:简单。    
        这种方式 ,底层是通过反射来实现的。
     
    1.2.创建独立model对象,页面通过ognl表达式封装 (属性驱动)
    // 页面: 
            用户名  <input type="text" name="user.username" /> <br/>  ----- 基于OGNL表达式的写法
    // Action:
            public class RegistAction2 extends ActionSupport {
                private User user;
                public void setUser(User user) {
                    this.user = user;
                }
    
                public User getUser() {
                    return user;
                }
            }
      优点:简单,解决了第一种封装的问题
        缺点:在页面上使用了ognl表达式,页面不通用了。
        
        1.2.1 问题:这种方式,数据是怎样封装的?
         是通过struts2中的interceptor进行了数据封装.
          <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
    1.3.模型驱动(在开发中应用比较多)
       步骤:
      1.3.1.让action类实现ModelDriven
      1.3.2.重写getModel方法
      1.3.3.在action中实现化一个model对象,让getModel方法返回这个对象。
    // 页面:
            用户名  <input type="text" name="username" /> <br/> 
    // Action
    public class Login3Action extends ActionSupport implements ModelDriven<User> {
        private User user = new User();
        public User getModel() {
            return user;
        }
    }
     优点:解决了属性驱动存在的问题
     缺点:一次只能封装一个model对象.
        struts2 有很多围绕模型驱动的特性 
       * <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/> 为模型驱动提供了更多特性
     
    2、封装数据到Collection和Map

    1) 封装数据到Collection 对象

    // 页面:
        产品名称 <input type="text" name="products[0].name" /><br/>
    // Action :
    
    public class ProductAction extends ActionSupport {
        private List<Product> products;
        public List<Product> getProducts() {
            return products;
        }
        public void setProducts(List<Product> products) {
            this.products = products;
        }
    }

    2) 封装数据到Map 对象

    // 页面:
                  产品名称 <input type="text" name="map['one'].name" /><br/>  =======one是map的键值
    // Action :
                  public class ProductAction2 extends ActionSupport {
                         private Map<String, Product> map;
                         public Map<String, Product> getMap() {
                                return map;
                         }
                         public void setMap(Map<String, Product> map) {
                                this.map = map;
                         }
                  } 
    三、Struts2类型转换(了解)
     
    四、请求参数校验

    1.校验的分类 :客户端数据校验 和 服务器端数据校验

    客户端数据校验 ,通过JavaScript 完成校验 (改善用户体验,使用户减少出错 )

    服务器数据校验 ,使用框架内置校验功能(struts2 内置校验功能 ) ----- 必须的

    2、struts2 支持校验方式:

    1)手工代码校验请求参数:在服务器端通过编写java代码,完成数据校验

        缺点:代码校验 不适用于 大型项目, 流程数据复杂时,开发量和维护量 都会很大 

    2)Xml配置方式数据校验(企业主流校验):XML配置校验(主流)  注解配置校验

    步骤一 :编写jsp

    步骤二 :编写Action 继承ActionSupport 或者 实现 Validateable 接口

    步骤三 :封装请求参数

          * 使用xml校验 必须提供get方法

    步骤四 :编写校验规则xml文件

        a 在Action所在包 编写 Action类名-validation.xml 对Action所有业务方法进行校验

        b 引入DTD

                  ------ xwork-core-2.3.7.jar 中 xwork-validator-1.0.3.dtd

                  <!DOCTYPE validators PUBLIC

                 "-//Apache Struts//XWork Validator 1.0.3//EN"

                 "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

        c 内置校验器定义文件

                  xwork-core-2.3.7.jar 中 /com/opensymphony/xwork2/validator/validators/default.xml

       d 内建校验器

    * required (必填校验器,要求被校验的属性值不能为null)

    * requiredstring (必填字符串校验器,要求被校验的属性值不能为null,并且长度大于0,默认情况下会对字符串去前后空格)

    * stringlength (字符串长度校验器,要求被校验的属性值必须在指定的范围内,否则校验失败,minLength参数指定最小长度,maxLength参数指定最大长度,trim参数指定校验field之前是否去除字符串前后的空格)

    * regex (正则表达式校验器,检查被校验的属性值是否匹配一个正则表达式,expression参数指定正则表达式,caseSensitive参数指定进行正则表达式匹配时,是否区分大小写,默认值为true)

    * int(整数校验器,要求field的整数值必须在指定范围内,min指定最小值,max指定最大值)

    * double(双精度浮点数校验器,要求field的双精度浮点数必须在指定范围内,min指定最小值,max指定最大值)

    * fieldexpression (字段OGNL表达式校验器,要求field满足一个ognl表达式,expression参数指定ognl表达式,该逻辑表达式基于ValueStack进行求值,返回true时校验通过,否则不通过)

    * email(邮件地址校验器,要求如果被校验的属性值非空,则必须是合法的邮件地址)

    * url(网址校验器,要求如果被校验的属性值非空,则必须是合法的url地址)

    * date(日期校验器,要求field的日期值必须在指定范围内,min指定最小值,max指定最大值)

    e    案例:

    required  必填校验器
    <field-validator type="required">
           <message>性别不能为空!</message>
    </field-validator>
    
    requiredstring  必填字符串校验器
    <field-validator type="requiredstring">
           <param name="trim">true</param>
           <message>用户名不能为空!</message>
    </field-validator>
    
    stringlength:字符串长度校验器
    <field-validator type="stringlength">
        <param name="maxLength">10</param>
        <param name="minLength">2</param>
        <param name="trim">true</param>
        <message><![CDATA[产品名称应在2-10个字符之间]]></message>
    </field-validator>
    
    int:整数校验器
    <field-validator type="int">
        <param name="min">1</param>
        <param name="max">150</param>
        <message>年龄必须在1-150之间</message>
    </field-validator>
    
    date: 日期校验器
    <field-validator type="date">
        <param name="min">1900-01-01</param>
        <param name="max">2050-02-21</param>
        <message>生日必须在${min}到${max}之间</message>
    </field-validator>
    
    url:  网络路径校验器
    <field-validator type="url">
        <message>主页地址必须是一个有效网址</message>
    </field-validator>
    
    email:邮件地址校验器
    <field-validator type="email">
        <message>电子邮件地址无效</message>
    </field-validator>
    
    regex:正则表达式校验器
    <field-validator type="regex">
         <param name="regexExpression"><![CDATA[^13d{9}$]]></param>
         <message>手机号格式不正确!</message>
    </field-validator>
    
    fieldexpression : 字段表达式校验
    <field-validator type="fieldexpression">
           <param name="expression"><![CDATA[(password==repassword)]]></param>
           <message>两次密码输入不一致</message>
    </field-validator>

    f    如何对指定的方法校验:格式  Action类名-ActionName(<action>元素name属性)-validation.xml

    例如 : 校验AddCustomerAction中execute方法  配置 <action name="addcustomer" .../> 校验文件名字: AddCusotmerAction-addcustomer-validation.xml

    3)自定义校验规则(了解一下就行)

     
     
     
     
     
     
  • 相关阅读:
    Oracle基础知识整理
    linux下yum安装redis以及使用
    mybatis 学习四 源码分析 mybatis如何执行的一条sql
    mybatis 学习三 mapper xml 配置信息
    mybatis 学习二 conf xml 配置信息
    mybatis 学习一 总体概述
    oracle sql 语句 示例
    jdbc 新认识
    eclipse tomcat 无法加载导入的web项目,There are no resources that can be added or removed from the server. .
    一些常用算法(持续更新)
  • 原文地址:https://www.cnblogs.com/shelly0307/p/10765240.html
Copyright © 2011-2022 走看看