首先表示感谢,我的问题是这样,客户端通过Jquery与后台Action进行交互,Action返回JSON数理由Jquery在前台页面外理,此时我想在Action中加入一个拦截器判断用户是否登录过,拦截器有一个字段标识用户是否登录,我需要在页面上显示,但是页面获取到的数据总为null,拦截器代码如下:
[code="java"]
public class GroupManagerInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 7888403326632482987L;
private String status;//此属性我要在前台页面中获取
public String getStatus() {
return status;
}
@Override
public 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();
}
}
[/code]
Struts.xml中配置信息如下:
[code="xml"]
status
[/code]
为什么在页面中status总是为null,我怎么才能获取到拦截器中的这个status呢?再次感谢各位...
是啊。放作用域里可以也行啊。干嘛非要用jQuery取呢。只用过DWR还没用过这东西。可能你的status丢失了。不要放拦截器里试试。在外面定义个别的类,类里定义个static String status存起来,拦截器给它设置,页面再get试试。
放session或request里面
我想是不支持这种写法吧
Interceptor的下一步是action
不是jsp
可以吧status 字段放Action 里面声明,再拦截器中取修改status的value
修改 status的get 在 get器中 自己手动序列化 status
放request或session里面 貌似直接用el表达式就可以取吧 跟JQuery 不带关系吧
你可以试哈能不能直接取,记得可以的不过冒测试过不敢确定
[quote]可以吧status 字段放Action 里面声明,再拦截器中取修改status的value
修改 status的get 在 get器中 自己手动序列化 status[/quote]
struts2的序列化好像是由拦截器实现的,在默认拦截器之前调用你的拦截器应该可以。
不太明白你的需求,看你的代码好像是验证用户登录没有或用户是否合法,如果否就跳登录(为啥不用过滤器)
为什么楼主还不明白,这是struts本身的性质决定的
action中的实例变量能够在jsp页面中直接访问,是因为使用ongl将实例变量放到了request中的。
而Interceptor中用于过滤,struts认为这个并不直接与jsp页面交互,所以并没有将其中的实例变量放入request中。
那么你自己来放一下不就成了。
request.setAttribute("state","");
除此之外,你还可以期待struts框架加入这个功能。
拦截器方法中有个参数ActionInvocation ai
定义一个Map对象
Map map = new HashMap();
map.put("result", "没有授权文件,请上传授权文件!");
获取值栈
ai.getStack().push(map);
然后返回
return "noAuthority";
这样数据直接写入了值栈里
配置文件
true
页面ajax的回调函数data.result 就会得到这个"没有授权文件,请上传授权文件!"
值;