struts2和过滤器中作用域问题!我有个过滤器,先经过一个过滤器后在执行struts2的一个action。现在action中的
struts2和过滤器中作用域问题!
我有个过滤器,先经过一个过滤器后在执行struts2的一个action。现在action中的每个方法都要request.setAttribute("paging", paging ); 这样重复很麻烦,我想把这句话放到过滤器中即:
过滤器中:
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest) arg0;
//过滤器前一些操作
chain.doFilter(arg0, arg1);
//等执行完成后 我去一个工具类获取事先准备好的分页类
Paging paging= SysThreadLocal.getPageClazz();
//然后放到作用域。
request.setAttribute("paging", paging );
}
这样的话我的action的每个方法中就不用再
Paging paging= SysThreadLocal.getPageClazz();
request.setAttribute("paging", paging );
但是为什么这样页面得不到这个作用域的值!
如果我把
Paging paging= SysThreadLocal.getPageClazz();
request.setAttribute("paging", paging );
放到action的每个方法中,页面就可以获取到!
这个是为什么啊!???
如果过滤中用session 作用域,当然页面是可以获取到的,目前是在request中页面获取不到值 过滤器action?struts2?
[解决办法] public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request=(HttpServletRequest) arg0;
//等执行完成后 我去一个工具类获取事先准备好的分页类
Paging paging= SysThreadLocal.getPageClazz();
//然后放到作用域。
request.setAttribute("paging", paging );
//过滤器前一些操作
chain.doFilter(arg0, arg1);
}
要不要试试反写?我总觉得你过滤完以后action就直接跳转页面了 你后面的代码就不执行了 也不知道对不对
[解决办法]页面A > 拦截器Filter > Struts.action > 页面B
页面A > 拦截器Filter > 拦截返回 > 页面A
理解就是
页面A (变量S)> 拦截器(变量S) 进行验证 结果有2
一 验证不拦截 chain.doFilter(arg0, arg1);执行下一步action 变量S 进入action中 拦截器中变量失效
二 验证拦截 response.sendRedirect("error/page.jsp"); return; 返回一个你想提示的错误页面或原页面
好久没看了 大概我的理解就是这 也就是说
在 chain.doFilter 或return的时候 你doFilter就已经验证结束了,所以你在chain.doFilter下面写的
码码就已经失效了 不可能在request传递了 session是作用于的问题
如果实在想用的话 你可以在action执行完毕后 在进行一次dofilter 就是 拦截>执行action>再拦截
理论就是个这样吧 ~希望没误人子弟