Struts 2 - не удалось найти действие или результат
Я настроил аннотацию для возврата значений в виде текста. Но это дает мне ошибку: не удалось найти действие или результат.
Ошибка консоли:
org.apache.struts2.dispatcher.Dispatcher - Could not find action or result
/part!finder.xhtml
No result defined for action action.PartAction and result success
Аннотация:
@Action(value="part!finder", results = {
@Result(name="SUCCESS", type="stream", params = {"contentType", "text/html", "inputName", "inputStream"}),
@Result(name="success", type="stream", params = {"contentType", "text/html", "inputName", "inputStream"})
})
public String finder() {
try {
inputStream = new ByteArrayInputStream(finder1().getBytes());
}
catch(Exception e) { }
return SUCCESS;
}
}
2 ответа
Измените имя действия, то есть value
атрибут в @Action
аннотация к value="part"
, !
это специальный символ, используемый для разделения имени действия и имени метода в URL. Но не в действии картирования. Добавляя !
в отображении имени действия вы делаете ваше действие недоступным для действия маппера, который ищет конфигурацию действия, которая содержит имена без !
, Этот символ разделяет имя действия и имя метода, поэтому его конфигурация не соответствует отображению.
Кстати, когда вы создаете URL, и у вас включен DMI (который по умолчанию включен), тогда лучше использовать method
приписывать url
или же submit
тег и правильный URL, который отображается в вашем действии, будет создан после рендеринга JSP (результат обработан). Вы можете проверить HTML-код, передаваемый браузеру, чтобы увидеть исходный HTML-код страницы. И вы можете обнаружить, что действие, сопоставленное методу (не по умолчанию), имеет префикс !
знак. Вы можете явно или с помощью тегов добавить метод в URL-адрес действия, чтобы выполнить метод, отличный от сопоставленного с действием.
Если вы используете DMI, примените @Action
на уровне класса, и пусть DMI сделает все остальное.
Если вы аннотируете на уровне действия, объявите уникальное имя действия и не используйте DMI.
(Или его синтаксис; это сбивает с толку.)