无法找到ref-name引用的拦截器类jsonValidationWorkflowStack

时间:2015-04-05 12:06:21

标签: java struts2 struts2-json-plugin struts2-interceptors

在我的Struts2应用程序中,我在struts.xml

中执行了以下操作
<action name="submitRecruitmentProcess" method="submitRecruitmentProcess"
            class="com.erp.people.action.RecruitementProcessManagementAction">
            <result name="success">jsp/process/processlist.jsp</result>         
            <interceptor-ref name="jsonValidationWorkflowStack"></interceptor-ref>
            <result name="input" type="json">
                <param name="ignoreHierarchy">false</param>
                <param name="includeProperties">actionErrors\[\d+\], fieldErrors\..+$,
                    actionMessages\[\d+\]</param>
            </result>    
        </action>

我正在扩展ma struts.xml文件中的json-default,并在我的类路径中使用struts-json插件。但在运行应用程序时,我收到如下错误

无法找到ref-name引用的拦截器类jsonValidationWorkflowStack

对于出了什么问题的任何想法,任何帮助都表示赞赏。

我已关注this链接

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>Struts2</display-name>
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.FilterDispatcher
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>jsp/login/login.jsp</welcome-file>
    </welcome-file-list>
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

    <context-param>
    <param-name>
      org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG
    </param-name>
    <param-value>/WEB-INF/tiles.xml</param-value>
  </context-param>

  <listener>
    <listener-class>org.apache.struts2.tiles.StrutsTilesListener</listener-class>
  </listener>

</web-app>

2 个答案:

答案 0 :(得分:2)

错误说你没有在类路径中放置struts2 json插件jar文件(即在WEB-INF/lib中)。获取struts2-json-plugin-2.3.20.jar并将其放在类路径中以解决问题。如果您已经下载了struts2 Jars,则可以将此Jar文件视为下载包的一部分。

在检查您提供的link时,如果您想使用 Struts2-2.3.20 ,我发现了一些问题。

1)DOCTYPE中的struts.xml声明不正确。它应该是这样的:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
   "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <package name="default" extends="json-default">
        <action name="login" class="com.examples.action.LoginAction">
            <interceptor-ref name="jsonValidationWorkflowStack"></interceptor-ref>
            <result name="input" type="json">
                <param name="ignoreHierarchy">false</param>
                <param name="includeProperties">actionErrors\[\d+\], fieldErrors\..+$,
                    actionMessages\[\d+\]</param>
            </result>
        </action>
    </package>
</struts>

我刚用不同的软件包命名登录类进行测试。

另外,validation.xml文件的DOCTYPE声明不正确,它应该是这样的:

<?xml version="1.0" encoding="UTF-8"?>   

<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">

现在进入插件,如果你在类路径中没有JSON插件,那么你将获得运行时异常:

Caused by: Parent package is not defined: json-default

要解决此问题,请在应用的struts2-json-plugin-2.3.20中添加WEB-INF/lib,以使其位于类路径中。

现在,当JSP页面使用JQuery标记时,您必须将struts2-jquery-plugin-2.5.3.jar放在类路径中。

我已使用Struts2-2.3.20版本对其进行了测试,更正了您的代码,看看是否能解决问题。

答案 1 :(得分:0)

interceptor-ref标记不应为空体,因此您需要简化其用法

<interceptor-ref name="jsonValidationWorkflowStack"/>

这个拦截器堆栈可以在你的pacakge应该扩展的json-default包中找到,即

<package name="default" extends="json-default"> 

json插件应该在运行时的类路径上