记Struts2中访问Web元素的一个小Bug

    学习Struts2,感觉这个东西没有什么好记录的,技术性的东西,照着别人做就OK了,也没有需要自己去思考,去领悟的地方。

    马老师讲的话很经典啊:如果有谁已经可以丧失了学习的热情,那他一定的本科毕业的!

 问题是这样的,用Struts2访问Web元素,一共有四种办法,前两种是访问Map类型,有两种办法:IoC方法和依赖Struts2方法,IoC方法是推荐的一种做法,怎么做呢,让Action类implements SessionAware接口,然后覆写其中的setSession方法就可以了,代码如下:

  
  
  
  
  1. package com.xh.action; 
  2.  
  3. import java.util.Map; 
  4.  
  5. import javax.servlet.ServletContext; 
  6.  
  7. import org.apache.struts2.ServletActionContext; 
  8. import org.apache.struts2.interceptor.SessionAware; 
  9.  
  10. import com.opensymphony.xwork2.ActionContext; 
  11. import com.opensymphony.xwork2.ActionSupport; 
  12.  
  13. public class LoginAction extends ActionSupport implements SessionAware{ 
  14.     private Map<String,Object> session; 
  15.  
  16.      
  17.     public void setSession(Map<String, Object> arg0) { 
  18.         // TODO Auto-generated method stub 
  19.          
  20.     } 

另外一种方法就是依赖Struts2的方法,从ActionContext中得到,代码实现如下

  
  
  
  
  1. public class LoginAction extends ActionSupport{ 
  2.     private Map<String,Object> session; 
  3.  
  4.      
  5.     public LoginAction() { 
  6.         session=ActionContext.getContext().getSession(); 
  7.     } 

Struts2的Bug就出在这里,如果在构造方法中获取session对象,结果为空。但是如果在其它的方法中,则不为空。

怎么解决问题呢?其实就是Struts2的web.xml的配置问题。

  
  
  
  
  1. <filter> 
  2.        <filter-name>struts2</filter-name> 
  3.        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 
  4.    </filter> 
  5.  
  6.    <filter-mapping> 
  7.        <filter-name>struts2</filter-name> 
  8.        <url-pattern>/*</url-pattern> 
  9.    </filter-mapping> 

不管原来是怎么配的,把配置文件改成这样就OK了!

你可能感兴趣的:(struts,访问Web元素为空)