hejinguo727
2010-09-16 00:21 阅读 231
已采纳

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条回答 默认 最新

  • 已采纳
    zhouyong008 zhouyong008 2010-09-16 14:14

    是啊。放作用域里可以也行啊。干嘛非要用jQuery取呢。只用过DWR还没用过这东西。可能你的status丢失了。不要放拦截器里试试。在外面定义个别的类,类里定义个static String status存起来,拦截器给它设置,页面再get试试。

    点赞 评论 复制链接分享
  • w858323227 w858323227 2010-09-16 00:46

    放session或request里面

    点赞 评论 复制链接分享
  • CaiHuajiang CaiHuajiang 2010-09-16 09:05

    我想是不支持这种写法吧
    Interceptor的下一步是action
    不是jsp

    点赞 评论 复制链接分享
  • w858323227 w858323227 2010-09-16 10:03

    可以吧status 字段放Action 里面声明,再拦截器中取修改status的value
    修改 status的get 在 get器中 自己手动序列化 status

    点赞 评论 复制链接分享
  • w858323227 w858323227 2010-09-16 10:18

    放request或session里面 貌似直接用el表达式就可以取吧 跟JQuery 不带关系吧
    你可以试哈能不能直接取,记得可以的不过冒测试过不敢确定

    点赞 评论 复制链接分享
  • w858323227 w858323227 2010-09-16 11:47

    [quote]可以吧status 字段放Action 里面声明,再拦截器中取修改status的value
    修改 status的get 在 get器中 自己手动序列化 status[/quote]
    struts2的序列化好像是由拦截器实现的,在默认拦截器之前调用你的拦截器应该可以。

    不太明白你的需求,看你的代码好像是验证用户登录没有或用户是否合法,如果否就跳登录(为啥不用过滤器)

    点赞 评论 复制链接分享
  • CaiHuajiang CaiHuajiang 2010-09-16 12:29

    为什么楼主还不明白,这是struts本身的性质决定的
    action中的实例变量能够在jsp页面中直接访问,是因为使用ongl将实例变量放到了request中的。
    而Interceptor中用于过滤,struts认为这个并不直接与jsp页面交互,所以并没有将其中的实例变量放入request中。
    那么你自己来放一下不就成了。
    request.setAttribute("state","");

    除此之外,你还可以期待struts框架加入这个功能。

    点赞 评论 复制链接分享
  • thekof879 thekof879 2016-02-19 14:13

    拦截器方法中有个参数ActionInvocation ai
    定义一个Map对象
    Map map = new HashMap();
    map.put("result", "没有授权文件,请上传授权文件!");
    获取值栈
    ai.getStack().push(map);
    然后返回
    return "noAuthority";
    这样数据直接写入了值栈里
    配置文件

    true

    页面ajax的回调函数data.result 就会得到这个"没有授权文件,请上传授权文件!"
    值;

    点赞 评论 复制链接分享

相关推荐