я хотел бы иметь некоторые глобальные результаты в моем приложении. В старой доброй конфигурации 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
.
struts.xml
. Это правильно, если подумать: в какое действие следует поместить глобальный результат? - person Andrea Ligios   schedule 27.09.2013