У меня есть старый проект, в котором используются сопоставления struts2, настроенные в формате xml. Я хотел сделать его немного свежее и использовать сопоставление аннотаций, как это было бы в весеннем mvc. Итак, я обнаружил, что struts2 позволяет это. Но после того, как я добавил
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-convention-plugin</artifactId>
<version>${org.apache.struts.version}</version>
</dependency>
в мой пом xml. Моя конфигурация xml перестала работать.
Вот что у меня есть в моем struts.xml
:
<action name="my/home" class="my.dhblah.MyAction">
<result type="redirectAction">my/home/search</result>
</action>
Я удалил плагин из maven pom. Я отлаживал стойки, и в DefaultActionInvocation.createResult()
в строке proxy.getConfig()
я вижу следующее:
result = {com.opensymphony.xwork2.config.entities.ActionConfig@10444}"{ActionConfig my/home (my.dhblah.MyAction) - null}"
interceptors = {java.util.Collections$UnmodifiableRandomAccessList@10447} size = 20
params = {java.util.Collections$UnmodifiableMap@10448} size = 0
results = {java.util.Collections$UnmodifiableMap@10449} size = 2
exceptionMappings = {java.util.Collections$UnmodifiableRandomAccessList@10450} size = 1
className = {java.lang.String@10451}"my.dhblah.MyAction"
methodName = null
packageName = {java.lang.String@10452}"my"
name = {java.lang.String@10453}"my/home"
allowedMethods = {java.util.Collections$UnmodifiableSet@10454} size = 1
location = null
когда я расширяю раздел "results"
, я вижу два сопоставления результатов "success"
и "exception"
После включения плагина в pom.xml
я вижу в той же строке следующее:
config = {com.opensymphony.xwork2.config.entities.ActionConfig@10457}"{ActionConfig home (my.dhblah.MyAction.execute()) - null}"
interceptors = {java.util.Collections$UnmodifiableRandomAccessList@10460} size = 18
params = {java.util.Collections$UnmodifiableMap@10461} size = 0
results = {java.util.Collections$UnmodifiableMap@10462} size = 0
exceptionMappings = {java.util.Collections$UnmodifiableRandomAccessList@10463} size = 0
className = {java.lang.String@10464}"my.dhblah.MyAction"
methodName = {java.lang.String@10395}"execute"
packageName = {java.lang.String@10465}"my.dhblah#convention-default#/my"
name = {java.lang.String@10466}"home"
allowedMethods = {java.util.Collections$UnmodifiableSet@10467} size = 1
location = null
и после того, как я нажму на этот URL, у меня будет следующая ошибка:
Struts Problem Report
Struts has detected an unhandled exception:
Messages:
No result defined for action my.dhblah.MyAction and result success
Stacktraces
No result defined for action my.dhblah.MyAction and result success
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:373)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:275)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
Я не добавлял @Action
аннотацию к MyAction
, но похоже, что плагин-конвенция подбирает старые классы Action
и строит конфигурацию сопоставления до того, как просматривает конфигурацию xml, поэтому у меня возникает ошибка, что ничего не сопоставлено с результатом "success"
.
Была ли у кого такая проблема и как ее решить?
I wanted to make it a bit fresher and use annotations mapping
вам следует удалить всю старую конфигурацию XML и поместить аннотации везде, где это необходимо. В противном случае соглашение будет сканировать каждое действие, а не только аннотированные, и искажать конфигурацию. - person Andrea Ligios   schedule 12.09.2014