У меня возникла проблема с удалением аннотаций плагинов @Action
и @Result
Convention из действия и заменой их эквивалентной конфигурацией в struts.xml
.
package com.microed.cars.web;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import com.opensymphony.xwork2.ActionSupport;
public class HomeAction extends ActionSupport {
@Action(results = {
@Result(location = "/jsp/home.jsp")
})
@Override
public String execute() throws Exception {
return super.execute();
}
}
Когда эти аннотации есть, я могу успешно получить доступ к localhost:port/context/home.action
Когда я удаляю аннотации, я получаю ошибку struts «нет результата, определенного для действия.....», несмотря на то, что в struts.xml есть результат «захватить все» - весь 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.convention.package.locators" value="web"/>
<constant name="struts.convention.default.parent.package" value="beetroot"/>
<package name="beetroot" extends="json-default">
<action name="home" class="homeAction">
<result>/jsp/home.jsp</result>
</action>
<action name="cars" class="baseCarsAction">
<result name="input" type="json">
<param name="root">autoResults</param>
/jsp/home.jsp
</result>
</action>
</package>
</struts>
Он расширяет json-default, потому что мне нужен тип результата json для функции автозаполнения.
Я не знаю, почему он не получает сопоставление действий для класса homeAction
. Я знаю, что struts.xml
читается, потому что, если я удалю сопоставление действий «автомобили», автозаполнение отключится (но для этого нужны аннотации, которые я пытаюсь удалить, чтобы проверить это).
Я знаю, что «результат не определен» - это простая ошибка, обычно вызванная ошибками орфографии/прописных букв, но здесь это определенно не так, просто кажется, что игнорируется все «домашнее» сопоставление действий.
При переходе через DefaultActionInvocation.createResult
вообще нет «результатов», с которыми можно попытаться сопоставить.