原文: https://howtodoinjava.com/struts2/solved-unable-to-find-interceptor-class-referenced-by-ref-name/

在为@InterceptorRef示例编写代码时,我才知道此功能。 我必须在struts.xml文件中声明拦截器定义,而我想通过注解使用拦截器。 第一次尝试时,失败并显示以下错误:

  1. Unable to load configuration. - [unknown location]
  2. at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:70)
  3. at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:446)
  4. at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:490)
  5. Caused by: Unable to find interceptor class referenced by ref-name customStack - [unknown location]
  6. at com.opensymphony.xwork2.config.providers.InterceptorBuilder.constructInterceptorReference(InterceptorBuilder.java:63)
  7. at org.apache.struts2.convention.DefaultInterceptorMapBuilder.buildInterceptorList(DefaultInterceptorMapBuilder.java:95)
  8. at org.apache.struts2.convention.DefaultInterceptorMapBuilder.build(DefaultInterceptorMapBuilder.java:86)
  9. at org.apache.struts2.convention.DefaultInterceptorMapBuilder.build(DefaultInterceptorMapBuilder.java:64)

原因:

默认情况下,Convention插件使用其自己的包Convention-default,其中不包含您在struts.xml中定义的包。 这意味着Convention将在其中放置您的操作的包不会扩展定义拦截器的包。

[已解决] 无法找到`ref-name`引用的拦截器类 - 图1

随机异常

解决方案

要更改,您有两个选择:

  1. 使用@ParentPackage注解

  2. struts.xml中定义<constant name=”struts.convention.default.parent.package” value=”default”/ >

例如:

  1. <struts>
  2. <package name="default" namespace="/" extends="struts-default">
  3. <interceptors>
  4. <interceptor name="demoCustomInterceptor" class="com.howtodoinjava.struts2.example.web.DemoCustomInterceptor" />
  5. <interceptor-stack name="customStack">
  6. <interceptor-ref name="demoCustomInterceptor"/>
  7. <interceptor-ref name="defaultStack" />
  8. </interceptor-stack>
  9. </interceptors>
  10. </package>
  11. <constant name="struts.convention.result.path" value="/WEB-INF/jsp/" />
  12. <constant name="struts.devMode" value="true" />
  13. <constant name="struts.action.extension" value="action," />
  14. <constant name="struts.custom.i18n.resources" value="test" />
  15. <constant name="struts.convention.default.parent.package" value="default"/>
  16. </struts>

这样可以解决问题。

祝您学习愉快!