我想在我的应用程序中获得一些全局结果。在良好的旧 XML 配置中,它看起来像:
<global-results>
<result name="error" type="redirectAction">
<param name="actionName">index</param>
<param name="namespace">/</param>
</result>
</global-results>
但是当我使用约定插件时,XML 中的全局结果似乎被忽略了,那么我如何使用约定插件来实现它呢?我不想让我的所有操作类都扩展一个定义了这些全局结果的自定义类。我认为package-info.java
应该是我的朋友,但我所能定义的与结果有关的只是@org.apache.struts2.convention.annotation.ResultPath
。
只是要明确一点:我不想避免struts.xml
配置 - 我只想有一些工作的全局转发,所以如果任何操作出现错误,我想将用户转发到中央错误页面。这目前不适用于我的配置。如果您在我struts.xml
或我的行为中发现问题并且可以帮助我解决它,那就太好了。
struts.xml
也许事情的顺序?这是我的结构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>
<constant name="struts.devMode" value="false" />
<constant name="struts.convention.result.path" value="/content/"/>
<constant name="struts.convention.default.parent.package" value="my-package"/>
<constant name="struts.convention.package.locators.disable" value="true"/>
<constant name="struts.convention.action.packages" value="..."/>
<constant name="struts.custom.i18n.resources" value="global" />
<constant name="struts.multipart.maxSize" value="10485760" />
<package name="my-package" extends="struts-default,json-default" namespace="/">
<result-types>
<result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/>
</result-types>
<interceptors>
<interceptor name="login" class="loginInterceptor" />
<interceptor name="pagetitle" class="pagetitleInterceptor"></interceptor>
<interceptor-stack name="secureStack">
...
</interceptor-stack>
<interceptor-stack name="insecureStack">
...
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="secureStack" />
<global-results>
<result name="error" type="redirectAction">
<param name="actionName">index</param>
<param name="namespace">/</param>
</result>
</global-results>
</package>
</struts>
在我的行动中,我有:
public class MyActionClass extends ActionSupport {
@Actions({ @Action(value = "my-action", results = { @Result(name = "success", type = "tiles", location = "my.location") }) })
public final String myAction() throws Exception {
return ERROR;
}
}
当然myAction
有更多的功能 - 这只是为了说明。执行操作时,它会在my-action.jsp
不使用磁贴的情况下转发到 ,但我希望它会转发到/index.action
.