以下是我的例子 这是STRUTS的XML loginInterceptor是我自定义的拦截器
<package name="one" extends="struts-default" namespace="/one">
<!-- 设置一个拦截器栈 -->
<interceptors>
<interceptor name="loginInterceptor" class="XXXXXX.XX.loginInterceptor"></interceptor>
<interceptor-stack name="mystack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="loginInterceptor"/>
</interceptor-stack>
</interceptors>
<!-- 定义在该ACTION包下默认要使用的拦截器栈 -->
<default-interceptor-ref name="mystack"/>
<!-- 定义全局转向 -->
<global-results>
<result name="input">/error.jsp</result>
</global-results>
<!-- crud add operation -->
<action name="addCrudTest" class="crudTestAction" method="addCrudTest">
<result name="success">/index.jsp</result>
</action>
</package> 我在登陆页面已经把登陆的用户ID放到session里面了接下来是我的loginInterceptor 拦截器
@Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("----------------------进入监听");
ActionContext ctx = invocation.getInvocationContext();
session = ctx.getSession();
userId=(String) session.get("userId");
if(userId!=null&&!userId.equals("")){
System.out.println("----------------------用户:"+userId+" 进入系统");
return invocation.invoke();
}
System.out.println("----------------------非法用户访问!");
return Action.INPUT;
}
现在一切都正常,可是当我在页面中直接输入addCrudTest.action的时候 居然总说找不到要转向的页面?而且拦截器里面的输出语句 重复输出了11遍?我另外一个项目就是这样配的 完全正常 所以万般无奈只能请高人解答了
<package name="one" extends="struts-default" namespace="/one">
<!-- 设置一个拦截器栈 -->
<interceptors>
<interceptor name="loginInterceptor" class="XXXXXX.XX.loginInterceptor"></interceptor>
<interceptor-stack name="mystack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="loginInterceptor"/>
</interceptor-stack>
</interceptors>
<!-- 定义在该ACTION包下默认要使用的拦截器栈 -->
<default-interceptor-ref name="mystack"/>
<!-- 定义全局转向 -->
<global-results>
<result name="input">/error.jsp</result>
</global-results>
<!-- crud add operation -->
<action name="addCrudTest" class="crudTestAction" method="addCrudTest">
<result name="success">/index.jsp</result>
</action>
</package> 我在登陆页面已经把登陆的用户ID放到session里面了接下来是我的loginInterceptor 拦截器
@Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("----------------------进入监听");
ActionContext ctx = invocation.getInvocationContext();
session = ctx.getSession();
userId=(String) session.get("userId");
if(userId!=null&&!userId.equals("")){
System.out.println("----------------------用户:"+userId+" 进入系统");
return invocation.invoke();
}
System.out.println("----------------------非法用户访问!");
return Action.INPUT;
}
现在一切都正常,可是当我在页面中直接输入addCrudTest.action的时候 居然总说找不到要转向的页面?而且拦截器里面的输出语句 重复输出了11遍?我另外一个项目就是这样配的 完全正常 所以万般无奈只能请高人解答了
解决方案 »
- jsp页面上的excal 如何传值到后台?
- 对象名 'users' 无效。
- 动态函数参数设计
- 大家看一下我对struts的理解,如有不对请指教,顺便问点spring/hibernate的问题
- 什么情况下使用JMS
- 麻烦大家给个意见
- 谁在用中文转马的时候遇到过转偶数个汉字,奇数个汉字不转的问题!很怪!可就让我碰上了!
- 这两道题在网上的答案好象有两种?
- tomcat运行struts提示java.lang.ClassNotFoundException异常
- JAVA 形参String...和String[]有什么区别
- service 代码转struts2 代码写法请大家指教!
- safari浏览器报Your copy of safari is missing important software resources如何解决?
但看楼主贴出的配置文件,有点疑问:
你定义的namespace="/one"是不是应该加入addCrudTest.action前面,如one/addCrudTest.action;
感谢你的提示,刚才在网上又搜了一下有个人说的回答跟你很像,因为跳转是服务器端跳转,地址栏没改变,所以会造成路径错误,我给全局跳转后面改成了重定向:<result name="input" type="redirect">/error.jsp</result>
这样就好了,不过我还是不太理解 即使type="redirect"重定向,可是和命名空间似乎关系也不大。有点疑惑。但是问题确实解决了如果有朋友遇到此类问题,希望可以帮助你解决。