【坑】使用拦截器跳转Action无法获取到传递过来的参数

来源:互联网 发布:足下软件学院校长 编辑:程序博客网 时间:2024/05/20 09:06

原因(其实这个原因我也不是很懂):在strust.xml中,如果是默认的package的话,会默认使用<interceptor-ref name="defaultStack"></interceptor-ref>,就会造成这样。

解决的办法:使用拦截器栈,栈中实现了<interceptor-ref name="defaultStack"></interceptor-ref>和你自己定义的拦截器,之后以拦截器栈的名字使用的为action设置拦截器

以下示例的作用是,实现自己的拦截器checkUserInte作为默认的拦截器

<interceptors><interceptor-stack name="checkUser"><interceptor-ref name="checkUserInte"></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref></interceptor-stack><interceptor name="checkUserInte" class="com.wx.wx.inte.CheckUser"></interceptor></interceptors><default-interceptor-ref name="checkUser"></default-interceptor-ref>

这样就可以在当前包中所有的action都添加个拦截器,这个拦截器的类就是com.wx.wx.inte.CheckUser

在这个类里面我是这样写的

public class CheckUser extends AbstractInterceptor {@Overridepublic String intercept(ActionInvocation invocation) throws Exception {// TODO Auto-generated method stubHttpSession session = AppTool.getSession();//只有获取验证码、用户登录和用户注册可以不做验证if(invocation.getAction().getClass() == GetCode.class || invocation.getAction().getClass() == Register.class ||invocation.getAction().getClass() == Login.class) {return invocation.invoke();} else if(session.getAttribute("user") != null){//用户已经登录return invocation.invoke();} else {System.out.println("跳转到主页");return Action.LOGIN;}}}

其中的if是判断当前拦截的action是不是不需要拦截,如果是就直接invoke()调用action,如果当前用户已经登录(session中会有user参数,这里的session不是Map的哦)也放行,如果没有登录就返回一个Action.Login来跳转到登录页面,在这里Action.Login就是login如果要它跳转到某一个result的话,就需要在global-results中写一个result,我是这样写的

<global-results><result name="login" type="redirect">/index.jsp</result></global-results>

这个result中不加type="redirect"的话貌似会不能跳转,我这边就是这样的。这样当return Action.Login时就会跳转到index.jsp文件下了

0 0
原创粉丝点击