struts2_03 自定义类型转换器 拦截器

来源:互联网 发布:中国空巢老人数据 编辑:程序博客网 时间:2024/06/03 12:28


一、自定义类型转换器


      1、编写一个类,继承com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter
      2、覆盖掉其中的public Object convertValue(Map<String, Object> context, Object value,Class toType)
            context:    OGNL表达式的上下文
            value:      实际的值。用户输入的都是字符串,但他是一个String数组。
            toType:    目标类型
            -------------------------------------------------------------------------------------------------------------
            public class DateConvertor extends DefaultTypeConverter {
                @Override
                public Object convertValue(Map<String, Object> context, Object value,Class toType) {
                    DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
                    if(toType==Date.class){
                          //2013/05/31----->java.util.Date 保存数据时
                          String strValue = ((String[])value)[0];
                          try {
                              return df.parse(strValue);
                          } catch (ParseException e) {
                              throw new RuntimeException(e);
                      }
                    }else{
                          //java.util.Date----->2013/05/31 获取数据时
                          Date dValue = (Date)value;
                          
                          return df.format(dValue);
                    }
                }
            }
          -------------------------------------------------------------------------------------------------------------
                
      3、注册类型转换器
            3.1局部类型转换器:只对当前的Action有效
                    具体做法:在动作类相同的包中,建立一个名称是“动作类名-conversion.properties”的配置文件,
                            文件中增加以下内容:要验证的字段=验证转换器的类全名
                             如:   birthday=cn.itcast.convertor.DateConvertor
            3.2全局类型转换器:对所有的Action都有效
                    具体做法:在WEB-INF/classes目录(src)下,建立一个名称为"xwork-conversion.properties"的配置文件,
                            文件中增加以下内容:目标类型全名=验证转换器类全名
                                java.util.Date=cn.itcast.convertor.DateConvertor   
                注意:如果转换失败,Struts2框架会寻找name=input的结果页面
                注: JDK必须为7  若JDK为8则有问题
                      
                      
                      
                              
二、自定义拦截器


        1、编写一个类,实现com.opensymphony.xwork2.interceptor.Interceptor
        
        2、主要实现public String intercept(ActionInvocation invocation) throws Exception{}方法
                该方法的返回值就相当于动作的返回值
                如果调用了String result = invocation.invoke();得到了动作类的返回的值。
                    public String intercept(ActionInvocation invocation) throws Exception {
                            //判断用户是否登录
                            HttpSession session = ServletActionContext.getRequest().getSession();
                            Object obj = session.getAttribute("user");
                            if(obj==null){
                                  return "login";
                            }else{
                                  return invocation.invoke();//调用动作方法
                            }
                    }
                    
        3、拦截器定义好后,一定要在配置文件中进行注册:该步只是定义拦截器,并没有起作用 
                <interceptors> 
                    <interceptor name="permissionInterceptor" class="cn.itcast.interceptor.PermissionInterceptor"></interceptor>
                </interceptors>
                
        4、配置文件中的动作,要通过<interceptor-ref name="permissionInterceptor"></interceptor-ref>使用该拦截器
             注意:一旦动作中使用了自定义的拦截器,那么默认的就不起作用了。
                  一般将默认的拦截器声明在最前面,自定义的拦截器放在最后
                  <interceptor-ref name="defaultStack"></interceptor-ref>  
                  <interceptor-ref name="permissionInterceptor"></interceptor-ref>
          
        5、全局拦截器     
             注:  多个动作类都要使用的话,可以通过package来进行组合。
             拆分struts.xml时,在子配置文件中调用全局的拦截器如下:
                 ---------------------------------------------------------------------------------------------------------------------------
                 struts2.xml配置如下:
                       <struts>
                          <package name="mypackage" extends="struts-default">
                               <!-- 配置全局的权限拦截器  -->
                              <interceptors>
                                  <interceptor name="permissonInterceptor" class="cn.itcast.interceptor.PermissonInterceptor"></interceptor>
                                  <interceptor-stack name="mydefaultstack"> 
                                      <interceptor-ref name="defaultstack"></interceptor-ref>
                                      <interceptor-ref name="permissonInterceptor"></interceptor-ref>
                                  </interceptor-stack>
                              </interceptors>
                           </package>
                           
                          <include file="interceptor.xml"></include>                                        
                      </struts>
                      
                      
                interceptor.xml配置如下:
                      <struts>
                          <package name="interceptor" extends="mypackage">
                              <action name="visitIndex" class="cn.itcast.action.VisitAction" method="execute">
                                  <!-- 调用struts.xml中全局的拦截器 -->
                                  <interceptor-ref name="mydefaultstack"></interceptor-ref>
                              </action>
                          </package>
                      </struts>
                 ---------------------------------------------------------------------------------------------------------------------------
                    
                    


          
                    
                    
                          
                          
                          
                          
                          
                          
                          
                          
                          
                          
                          
                          
                          
                          
                          

0 0
原创粉丝点击