Struts2的拦截器中属性页面获取问题,求解呀!

问题描述

首先表示感谢,我的问题是这样,客户端通过Jquery与后台Action进行交互,Action返回JSON数理由Jquery在前台页面外理,此时我想在Action中加入一个拦截器判断用户是否登录过,拦截器有一个字段标识用户是否登录,我需要在页面上显示,但是页面获取到的数据总为null,拦截器代码如下:public class GroupManagerInterceptor extends AbstractInterceptor {private static final long serialVersionUID = 7888403326632482987L;private String status;//此属性我要在前台页面中获取public String getStatus() {return status;}@Overridepublic String intercept(ActionInvocation invocation) throws Exception {HttpSession session = ServletActionContext.getRequest().getSession();VOManager vom = (VOManager) session.getAttribute("vom");status="TEST";if (null == vom) {status="从未登录过";System.out.println(status);return "login";}if (null == vom.getUsertype()|| !"GroupManager".equals(vom.getUsertype())) {status="用户性质不对";System.out.println(status);return "login";}System.out.println(status);return invocation.invoke();}}Struts.xml中配置信息如下:<interceptors><interceptor name="groupManagerInterceptor" class="com.garageManager.interceptor.GroupManagerInterceptor"></interceptor><interceptor-stack name="gmInterceptor"><interceptor-ref name="groupManagerInterceptor"></interceptor-ref><interceptor-ref name="json"></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack></interceptors><default-interceptor-ref name="gmInterceptor"></default-interceptor-ref><global-results><result type="json" name="login"><param name="includeProperties">status</param></result></global-results>为什么在页面中status总是为null,我怎么才能获取到拦截器中的这个status呢?再次感谢各位... 问题补充:w582875929 写道

解决方案

是啊。放作用域里可以也行啊。干嘛非要用jQuery取呢。只用过DWR还没用过这东西。可能你的status丢失了。不要放拦截器里试试。在外面定义个别的类,类里定义个static String status存起来,拦截器给它设置,页面再get试试。
解决方案二:
拦截器方法中有个参数ActionInvocation ai定义一个Map对象 Map<String, String> map = new HashMap<String, String>();map.put("result", "没有授权文件,请上传授权文件!");获取值栈 ai.getStack().push(map);然后返回 return "noAuthority";这样数据直接写入了值栈里配置文件<result type="json" name="noAuthority"> <param name="excludeNullProperties">true</param></result>----------页面ajax的回调函数data.result 就会得到这个"没有授权文件,请上传授权文件!"值;
解决方案三:
为什么楼主还不明白,这是struts本身的性质决定的action中的实例变量能够在jsp页面中直接访问,是因为使用ongl将实例变量放到了request中的。而Interceptor中用于过滤,struts认为这个并不直接与jsp页面交互,所以并没有将其中的实例变量放入request中。那么你自己来放一下不就成了。request.setAttribute("state","");除此之外,你还可以期待struts框架加入这个功能。
解决方案四:
引用可以吧status 字段放Action 里面声明,再拦截器中取修改status的value 修改 status的get 在 get器中 自己手动序列化 statusstruts2的序列化好像是由拦截器实现的,在默认拦截器之前调用你的拦截器应该可以。不太明白你的需求,看你的代码好像是验证用户登录没有或用户是否合法,如果否就跳登录(为啥不用过滤器)
解决方案五:
放request或session里面 貌似直接用el表达式就可以取吧 跟JQuery 不带关系吧你可以试哈能不能直接取,记得可以的不过冒测试过不敢确定
解决方案六:
可以吧status 字段放Action 里面声明,再拦截器中取修改status的value修改 status的get 在 get器中 自己手动序列化 status
解决方案七:
我想是不支持这种写法吧Interceptor的下一步是action不是jsp
解决方案八:
放session或request里面

时间: 2024-09-08 21:41:17

Struts2的拦截器中属性页面获取问题,求解呀!的相关文章

interceptor-spring中使用Interceptor拦截器,如何在拦截器中获取页面请求后台的方法的结果集?

问题描述 spring中使用Interceptor拦截器,如何在拦截器中获取页面请求后台的方法的结果集? spring中使用Interceptor拦截器,如何在拦截器中获取页面请求后台的方法的结果集? 解决方案 你可以在拦截器内获取访问的URL,自行判断 解决方案二: 获取页面请求后台的方法的结果集 什么意思?

spring 拦截方法中如何获取拦截器中变量的值

问题描述 spring 拦截方法中如何获取拦截器中变量的值 想在拦截方法中获取拦截器中变量的值,如何用代码实现?求指教.

[转载]难经3:Struts2,拦截器拦不住Result?

[问题] 使用Struts2作为web框架,知道它的拦截器(Interceptor)机制,类似与Filter和spring的AOP,于是实现了一个为Action增加自定义前置(before)动作和后置动作(after)的拦截器(曰:WInterceptor),不过用一段时间发现,在WInterceptor的after中,对Action对象的属性修改在页面看不到,对请求对象的属性设置也无效.为什么在调用了Action之后(invokeAction())之后,request就不能使用了呢,拦截器不能

Struts2之拦截器篇

拦截器是Struts2框架的核心和基础,Struts2绝大多数功能都是通过拦截器来完成的,当StrutsPrepareAndExecuteFilter拦截到用户请求后,大量拦截器会对该请求进行处理,然后才调用用户自定义的Action类中的方法进行处理请求,由此可见,拦截器是Struts2的核心所在. Struts2框架内建了大量的拦截器,我们可以在struts-default.xml中进行查看: 那么这些内置拦截器的具体作用是什么呢?     alias 实现在不同请求中相似参数别名的转换 au

Struts2 自定义拦截器栈后无法得到表单参数之解决办法

我自定义了一个拦截器,目的是在action执行之前像ValueStack中设置一些属性,代码是这样的: view plaincopy to clipboardprint? HttpServletRequest request=(HttpServletRequest)ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST);        OgnlValueStack stack=(OgnlValueStack)request.getAt

如何将跳转完整链接放入filter或者拦截器中

问题描述 如何将跳转完整链接放入filter或者拦截器中: 使用ServletActionContext.getRequest().getRequestURL()得到是: http://202.38.202.187:8088/Manager/baseInfo_park_edit.do 如果要获取到完整的链接地址: http://202.38.202.187:8088/Manager/baseInfo_park_edit.do?parkID=${parkid} 如何做才可以实现呢? 或者有什么方法

struts2整合spring3后,指定spring管理action之后,配置的struts2的拦截器,拦截不到东西

问题描述 struts2整合spring3后,指定spring管理action之后,配置的struts2的拦截器,拦截不到东西 struts2整合spring3后,指定spring管理action之后,配置的struts2的拦截器,拦截不到东西,这是什么原因??? Struts2的Action可以交给Spring管理,但Struts2的拦截器就拦截到不到请求了,望高手帮忙! 解决方案 我也遇到同样的问题 不整合的时候struts什么都能拦,整合后就拦不了了

struts2使用拦截器完成登陆显示用户信息操作和Struts2的国际化

其实学习框架,就是为了可以很好的很快的完成我们的需求,而学习struts2只是为了替代之前用的servlet这一层,框架使开发更加简单,所以作为一个小菜鸟,特别感谢那些超级无敌变态开发的框架供我们使用,当然说那些使超级无敌变态并不是说他们很变态,是他们的思想太强大了. 言归正传,这次使用的拦截器是struts2框架的核心之处,希望学习struts2框架的小伙伴重视起来哦.一起共勉.  1:第一步依旧是导包哦,使用别人的框架,第一步,就记住导入自己使用的核心包即可. 2:配置web.xml过滤器,

struts2.0-Struts2拦截器Struts2拦截器Struts2拦截器Struts2拦截器

问题描述 Struts2拦截器Struts2拦截器Struts2拦截器Struts2拦截器 请问谁有Struts2拦截器学习的详细资料,请问谁有Struts2拦截器学习的详细资料,感谢哈 解决方案 ? Struts2拦截器 ? ? 一.什么是拦截器? 1.拦截器,在AOP(Aspect-Oriented Programming<面向切面编程>)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. 在Webwork的中文文档的解释为--拦截器是动态