问题描述
首先表示感谢,我的问题是这样,客户端通过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里面