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

首先表示感谢,我的问题是这样,客户端通过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呢?再次感谢各位...

8个回答

是啊。放作用域里可以也行啊。干嘛非要用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 就会得到这个"没有授权文件,请上传授权文件!"
值;

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问