再次认识Struts2(二)

Struts2获取请求参数

 1属性驱动 

    1 直接将action 作为model  就可以得到请求参数  

     每一次的请求 都会产生一个新的action   缺点:需要单独定义javaBean,将action中的属性转到javaBean中

     底层是通过反射实现的

    2 在action中声明一个model

        private User user; 提供get/set方法

        在页面上使用ognl来描述  <input type="text" name="user.username">

        通过struts2中的名为params的interceptor进行数据封装

        <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor">

        缺点:在页面上使用了ognl表达式,页面无法通用。

 2模型驱动(开发中应用)

  在action中 implements ModelDriven接口

  在action中 override getModel方法

  在action中实现 model对象  然后让getModel方法返回这个对象

   public class LoginAction extends ActionSupport  implements ModelDriven<User>{

       private User user=new User();

       public User getModel(){

         return user;

        }

   }

  缺点:一次只能封装一个model对象

  

  将请求参数封装到集合中

    将请求参数封装在list中 map中

      页面  username:<input type="text"name="user[0].username"><br>

                password:<input type="password"name="user[0].password"><br>

                 username2:<input type="text"name="user[1].username"><br>

                 password2:<input type="password"name="user[1].password"><br>

      action类中

              private List<User> users;          private Map<String,User> map;

              get/set 方法

类型转换 

       struts内部提供大量类型转换器

       boolean和Boolean  char和Character  int和Integer  long和Long  float和Float  double和Double

       Date 可以接收 yyyy-MM-dd格式字符串  数组 集合

       类型转换器根接口  com.opensymphony.xwork2.conversion.TypeConverter.

     自定义类型转换器

       1 创建类实现TypeConverter接口     2 override接口中的方法 实现类型转换操作

                 方法一

                      implements TypeConverter    重写convertValue方法   

                 方法二

                      extends DefaultTypeConverter类  重写convertValue方法

                 方法三

                       继承DefaultTypeConverter类的一个子类 StrutsTypeConverter  重写 convertFromString 与convertToString 方法       

          3 注册类型转换器   

                   方法一 局部   在Action类所在包下  配置action类名-conversion.properties

                                配置文件格式   属性名称=类型转换器全类名

                   方法二  局部   在model类所在包下 创建model类名-conversion.properties

                                 配置文件格式  属性名称=类型转换器全类名

                   方法三   全局   在src下 创建xwork-conversion.properties 

                                 配置文件格式  要转换的类型全名称类型转换器的全类名 

  

           类转换器机制

              如果表单数据向model封装出现  no result defined  for action  .....and result input错误

              原因:当类型转换出现问题时,name为conversionError的interceptor会存储错误信息

                          在前面的拦截器出现问题时,workflow拦截器就会得到问题然后直接跳转到input视图

             配置错误信息展示<%taglib prefix="s" url="/struts-tags"%>    <s:fielderror/>  


             自定义类型转换器,出现类型转换问题,要跳转到input视图,必须抛出异常才可以。


数据校验

       struts2提供 服务器端校验

       两种方式  1 手动校验   2 配置校验

       手动校验(编码校验)    

           要求action继承 ActionSupport类    重写validate方法   使用this.addFieldError("username.message","用户名不能为空");

           在页面中 使用<s:fielderror fieldName=" username.message"/>展示特定的错误信息

           用于处理validate的拦截器  validation

           在struts-default.xml中拦截器validation 在 params之后,workflow之前,如果validation拦截器向action中存储了错误信息,workflow就会跳转到input视图。

           在一个action中有多个请求处理方法 ,创建方法名称为  validate+请求访问名    如请求访问方法为  login()  校验方法为 validateLogin() 

        

        配置校验

          要求action继承ActionSupport  很多校验规则代码已经写好了,只需要在xml文件中定义数据所使用校验规则就可以了

          配置文件位置:xml文件与action类在同一个包下

         名称:action类名-validation.xml

         约束:位于xwork-core下的 dtd文件 

         书写:根元素<validators>    <field name=”username“>  <field-validator type="requiredstring">  <message> 错误信息</message>

                     <field-validators>子元素   <param name=""></param> 用于指定校验器中的参数

            <field-validators type="stringLength">

                   <param name="maxLength">10</param>

                   <param name="minLength">6</param>

                    <message>用户名必须在${minLength}-${maxLength}位之间</message>

           </field-validators>

           常见的校验器

                        * 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指定最大值)

         

          校验器命名规则

           对action进行校验         action类名-validation.xml

           对action类中的某一个方法 进行校验    action类名-action名称-validation.xml


 

       

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值