Struts2初学 Struts2在Action获取内置对象+++struts2自定义类型转换器

Struts2初学 Struts2在Action获取内置对象request,session,application(即ServletContext)

  (2012-10-17 23:15:12)
标签: 

action中获取内置对象

 

struts

分类: Struts2
    truts2在Action中如何访问request,session,application(即ServletContext)对象????
方式一:与Servlet API解耦的方式
     可以使用struts2中提供的Map对象来访问HttpRequest,HttpSession和ServletContext对象,要获取这三个Map对象,可以使用com.opensymphony.xwork2.ActionContext类提供的静态方法
     ActionContext ctx=ActionContext.getContext();
    ctx.getApplication().put(“app”,”Application应用对 象”);//ServletContext放入app
    ctx.getSession().put(“ses”,”session应用对象”);
    ctx.put(“req”,”request对象”);

######:
上面的三个方法,仅相当与
request,session,applicationsetAttribute(string,object)方法。
struts2中提供的Map对象来 提供类似request,session,application内置对象的功能,这些内置对象只有内置对象的一小部分功能,它不依赖于servlet,所以是解耦合的!!!

方式二:
与Servlet API耦合的访问方式
     也可以直接访问Servlet环境中的HttpRequest,HttpSession和ServletContext对象。通过ServletActionContext.类提供的静态方法直接获取:

       HttpServletRequest request=ServletActionContext.getRequest();
       ServletContext context=ServletActionContext.getServletContext();
       HttpSession session=request.getSession();
       HttpServletResponse response=ServletActionContext.getResponse();

方式三、实现相关接口

   

  1. public class BaseAction extends ActionSupport implements SessionAware, ServletRequestAware, ServletResponseAware  
  2.   
  3.     private static final long serialVersionUID 7620009925942346125L;  
  4.       
  5.     ActionContext context ActionContext.getContext();  
  6.     HttpServletRequest request;  
  7.     HttpServletResponse response;  
  8.     SessionMap session;  
  9.       
  10.     //获取request,response,session方式一,非IoC方式,不用实现SessionAware, ServletRequestAware, ServletResponseAware  
  11.     //ActionContext context ActionContext.getContext();  
  12.     //HttpServletRequest request (HttpServletRequest) context.get(ServletActionContext.HTTP_REQUEST);  
  13.     //HttpServletResponse response (HttpServletResponse) context.get(ServletActionContext.HTTP_RESPONSE);  
  14.     //Map session context.getSession();  
  15.     //SessionMap session (SessionMap) context.get(ActionContext.SESSION);  
  16.       
  17.     //获取request,response,session方式一,IoC方式,必须实现SessionAware, ServletRequestAware, ServletResponseAware  
  18.     public void setSession(Map map)  
  19.         this.session (SessionMap) map;  
  20.      
  21.     public void setServletRequest(HttpServletRequest request)  
  22.         this.request request;  
  23.      
  24.     public void setServletResponse(HttpServletResponse response)  
  25.         this.response response;  
  26.      
  27.       
  28. Struts2初学  struts2自定义类型转换器

      (2012-10-18 20:08:13)
    标签: 

    自定义类型转换器

    分类: Struts2
    一、问题的引出
         Struts2的类型转换是基于OGNL表达式的,由于请求的参数都是字符串,而JAVA 本身属于强类型的的语言,这样就需要把请求参数字符串转换成其他类型。
       
      Struts2的类型转换器都需要实现一个TypeConverter接口,该接口位于ognl.jar包内,也是就Struts2框架的转换器使用了OGNL技术。该接口定义了一个convertValue()方法,实现该接口的类型转换器实现类都需要重写该方法来进行类型转换。OGNL还提供了一个实现TypeConverter接口的类DefaultTypeConverter,开发者只要继承该类,就可以开发类型转换器的实现类。

    二、自定义类型转换器步骤
      
      1.首先通过实现TypeCoverter接口或者继承DefaultTypeConverter实现类(该类实现了TypeCoverter接口)来实现自己的类型转换器(重写convertValue方法即可)。       

           由于TypeCoverter接口太复杂,所以OGNL 项目还提供了一个实现该接口的类 :DefaultTypeConverter.

        如:com.DateTypeConvert.java

        public class DateConverter extends DefaultTypeConverter {//要记得继承此类
             @Override  public Object convertValue(Map context, Object value, Class toType) {
                               //再重写convertValue方法
          SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
          try {
              if(toType == Date.class){//当字符串向Date类型转换时,这时value的来源是从url或//者表单提交
                  String[] params = (String[]) value;// Request.getParameterValues() ,转换//为string数组是因为像复选框之类的组件可以提交的值是一个数组
                  return dateFormat.parse(params[0]);//解析成日期格式(注意:这里的日期一定要是util包下的日期
              }else if(toType == String.class){//当Date转换成字符串时,这时value的来源是//action类,因此value不要强转为数组形式(注意:使用EL表达式向页面输出是该if不会被//执行,只有使用OGNL表达式向页面输出是才会进入此if语句
                  Date date = (Date) value;
                  return dateFormat.format(date);//转换为字符串
              }
          } catch (ParseException e) {}
          return null;
          }
      }


       其中,context是类型转换环境的上下文,value是需要转换的参数,toType 是转换后的目标类型。

       

       
         LoginAction.java:

      import java.util.Date;
      public class DateConvertAction
      {
          private Date date;

          public Date getDate()
          {
              return date;
          }

          public void setDate(Date date)
          {
              this.date = date;
          }
          public String execute()
          {
              System.out.println(date);
              return "ok";
          }
      }
       
      2.将该转换器注册在WEB应用中,这样 Struts 2 框架才能使用该类型的转换器。

        类型转换器的注册有 3种:

      (1)注册局部类型转换器:仅仅对某个Action的属性起作用。

      (2)注册全局类型的转换器:对所有Action 都有效。

      (3)使用 JDK1.5 的注释来注册转换器。

      局部类型转换器:

          在需要生效的Action类的包下新建ActionName-conversion.properties该文件,其中 ActionName是需要转换生效的Action的类名,后面的-conversion固定。

         内容:  待转换的action中的属性名=类型转换器的全类名。 注意:类型转换器是需要加包名,而且最后不能加标点符号

           如:date=com.DateTypeConvert


      全局类型转换器:

          在WEB-INF/classes或者src目录下新建xwork-conversion.properties文件。文件名是固定的。【注】xwork表示全局

          内容:待转换的类型 = 类型转换器的全类名

          xwork-conversion.properties:  java.util.Date=com.DateTypeConvert


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

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

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

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值