在struts2 的Action里,如果我用了 ActionContext.getContext().put("pageView", pageView);然后在jsp页面里很神奇地就用el表达式${pageView}就获取到该对象。可是当我在web.xml文件里
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter><filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>FORWARD</dispatcher>


</filter-mapping>加了那段红色的字段,el就获取不到了Action里面的值,这是为什么?

解决方案 »

  1.   

    楼主可以通过3种方式解决。
    1.struts2 的过滤器不响应forward请求。
    2.使用org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter过滤器代替org.apache.struts2.dispatcher.FilterDispatcher
    3 struts过滤器只响应特定的url,比如常用的方式*.action,这种方式未实践,楼主可以帮我实践下,按理说应该可以解决的。至于原因,没有深究。估计是FilterDispatcher没有将上一次请求中的ActionContext复制到下次请求中。
    楼主在action中返回一个结果类型,其实就是forward到一这个结果集对应的jsp中,于是这个forward就第二次被struts过滤器拦截了,于是你的ActionContext内容就不见了。