【问题标题】:struts2 interceptor problemsstruts2拦截器问题
【发布时间】:2010-07-26 17:26:58
【问题描述】:

我是struts2的新手,在此之前我一直在使用struts1.2,Spring和Hibernate的组合。刚开始使用Struts2、Spring和Hibernate应用,但似乎被拦截器异常困扰,

有两个错误不断发生,都在不同的场景中

1) 2010-07-26 19:50:58,031 错误 org.apache.struts2.dispatcher.Dispatcher.error:27 - 找不到操作或结果 没有为操作 com.inrev.bm.action.IRCampaignMgmtAction 和结果输入定义结果 在 com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:364) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:266) 在 com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252) 在 org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) 在 com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 在 com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 在 com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195) 在 com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237) 在 com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)

2) 2010-07-26 22:09:22,779 调试 com.opensymphony.xwork2.interceptor.ParametersInterceptor.debug:57 - 设置参数会话 => [ {"session_key":"djshjhdfkjhdjhuhhhgfhg-1133902930","uid" :1133902930,"expires":0,"secret":"fjhfhlkasjdhfkdsjfhjhyhfhdjhfjkdh","sig":"hfjdfhljksdfhjkasdhfjhdfjhakfjnmx,nvds"} ] 2010-07-26 22:09:22,780 调试 com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:57 - 属性:会话 2010-07-26 22:09:22,781 调试 com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:57 - 类:com.inrev.bm.action.IRFacebookAction 2010-07-26 22:09:22,797 调试 com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:57 - 属性会话的转换器为空。映射大小:0 2010-07-26 22:09:22,797 调试 com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:57 - 属性 [会话] 的字段级类型转换器 = 未找到 2010-07-26 22:09:22,798 调试 com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:57 - 属性 [会话] = 未找到的全局级类型转换器 2010-07-26 22:09:22,799 调试 com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:57 - 回退到默认类型转换器 [com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter@18a62f6] 2010-07-26 22:09:22,804 调试 com.opensymphony.xwork2.conversion.impl.XWorkConverter.debug:61 - 无法使用类型转换器转换值 [com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter] 无法从值 {"session_key":"6e2ecfba81fc0e9b889a80021133902930","uid":1133902930,"expires":0,"secret":"fjhfhlkasjdhfkdsjfhjhyhfhdjhfjkd","sig":"fe455338f9d8未知位置] 在 com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter.convertValue(XWorkBasicConverter.java:141) 在 com.opensymphony.xwork2.conversion.impl.XWorkBasicConverter.convertValue(XWorkBasicConverter.java:135) 在 com.opensymphony.xwork2.conversion.impl.XWorkConverter.convertValue(XWorkConverter.java:323) 在 com.opensymphony.xwork2.ognl.OgnlTypeConverterWrapper.convertValue(OgnlTypeConverterWrapper.java:28) 在 ognl.OgnlRuntime.getConvertedType(OgnlRuntime.java:1040) 在 ognl.OgnlRuntime.getConvertedTypes(OgnlRuntime.java:1057) 在 ognl.OgnlRuntime.getConvertedMethodAndArgs(OgnlRuntime.java:1083)

我可以看出第一个错误与验证器拦截器有关,第二个与参数转换器有关,但我似乎无法弄清楚如何修复它们。在第二个异常中,所有参数值都是从 facebook 发送的。非常感谢您的帮助。

问候, 罗希特

【问题讨论】:

    标签: jakarta-ee struts2 struts


    【解决方案1】:

    我可以帮助你解决第一个例外。您需要确保com.inrev.bm.action.IRCampaignMgmtAction 的操作映射具有input 结果:

     <action name="your-action-name" class="com.inrev.bm.action.IRCampaignMgmtAction">
       <result name="input">/WEB-INF/pat/to/input.jsp</result>
       <result name="success">/WEB-INF/pat/to/success.jsp</result>
     </action> 
    

    更新

    对于您的第二个错误,您可以在 XWorkConverter.getConverter() 方法中看到导致消息的代码(从第 366 行开始)。 session 类中的 session 属性是什么 Java 类型?

    如果 XWork 默认无法处理这种情况,您可能需要 define a custom type converter 处理。

    【讨论】:

    • 嗨,Pat,感谢您的建议,添加动作映射结果确实会停止异常,但是当我不想进行任何验证时,为什么它会进入验证页面。其次,由于验证不断失败,它继续进入输入映射。而且这似乎并没有发生在我所有的其他课程中。如何避免应用任何转换器。我想自己从请求对象中检索我的参数对象。
    • Struts2 根据validationworkflow 拦截器确定何时运行验证。如果您没有显式设置拦截器堆栈,则在您的 struts.xml 中应用 defaultStack(包括这两个拦截器)。对于这两个问题,您可以创建一个不包含验证拦截器或params 拦截器的自定义堆栈。然后你就可以自己提取对象了。下面解释拦截器以及如何为特定操作定义自定义堆栈:struts.apache.org/2.x/docs/interceptors.html
    • 嘿帕特,感谢您的回复,我删除了验证器拦截器,发生第二个错误是因为 Facebook 在授权期间发送了一个名为“会话”的变量,并且转换器拦截器试图将其转换为会话地图。不得不删除该操作类的会话感知接口,不想再为异常添加一个参数。
    • 感谢您让我知道发生了什么,以防我做同样类型的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多