在解析struts.xml时,在Struts 2中不使用velocity的异常

时间:2013-04-30 05:58:26

标签: java jsp struts2 struts-config

这是我的struts.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>

<constant name="struts.devMode" value="true" /> 
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" />  

<package name="Authentiate" extends="struts-default">

<global-results>

<result name="error">/error.jsp</result>

</global-results>

<action name="loginAuthenticate*" class="com.authenticate.actions.LoginAuthenticate" method="{1}">

<result name="success">/welcome.jsp</result>
<result name="error">/error.jsp</result>
<result name="redirectRegister" type="redirect">/registration.jsp</result>

</action>

</package>

我没有使用速度模板,但是我收到以下错误。

java.lang.RuntimeException: com.opensymphony.xwork2.inject.DependencyException: com.opensymphony.xwork2.inject.ContainerImpl$MissingDependencyException: No mapping found for dependency [type=org.apache.struts2.views.velocity.VelocityManager, name='default'] in public void org.apache.struts2.osgi.OsgiConfigurationProvider.setVelocityManager(org.apache.struts2.views.velocity.VelocityManager). - Class: com.opensymphony.xwork2.inject.ContainerBuilder

2 个答案:

答案 0 :(得分:0)

首先尝试使用默认类型dispatcher显式指向结果类型:

<result name="success" type="dispatcher">/welcome.jsp</result>
<result name="error" type="dispatcher">/error.jsp</result>
<result name="redirectRegister" type="redirect">/registration.jsp</result>

如果这没有帮助,看起来有一些无法解决的struts依赖项。根据apache的bugtracker的this bug,您应该将VelocityManager bean添加到struts.xml

<bean class="org.apache.struts2.views.velocity.VelocityManager" name="default" optional="true" />

答案 1 :(得分:0)

这是真的奇怪的错误。通过从依赖项中删除spring-struts jar来解决此问题。

如果您未在结果中使用力度模板,则无需将Velocity添加为依赖项。默认情况下,Struts2使用Freemarker模板。

如果您的服务器没有使用JMX,可能看不到错误,但如果您在JMX enabled appserver like JBOSS中运行它可能会引发错误。