Ошибка действия пуста при использовании результата диспетчера Struts 2

Я не получаю ошибку действия, когда использую результат dispatcher в Struts 2.

В классе действий приведенный ниже код используется для добавления сообщения об ошибке.

addActionError("Error");
return "Failure";

В конфигурации Struts:

...
<result name="Failure" type="dispatcher">/ShowError.do</result>
...
<action name="ShowError">
    <result>/jsp/ShowActionErrror.jsp</result>
</action>

In ShowActionErrror.jsp:

<div class="error"><s:actionerror /></div>

Но я не получаю сообщение об ошибке действия в ShowActionErrror.jsp?


person john    schedule 03.09.2013    source источник
comment
Чтобы использовать диспетчер с действиями, вам необходимо настроить контейнер для обработки переадресации через фильтр S2. В общем, я рекомендую против этого, хотя.   -  person Dave Newton    schedule 04.09.2013


Ответы (2)


Диспетчер — это тип результата Struts2 по умолчанию.

Он используется для выполнения стандартного поведения, от Action до JSP.

Специальные результаты необходимы для выполнения других операций, таких как Action to Action to JSP, например RedirectAction Result, Chain Result (не рекомендуется) и т. д. Обратите внимание, что вы потеряете Value Stack объектов. (отсюда и ActionErrors и ActionMessages) во время такого рода маршрутизации.

В вашем случае вы должны просто использовать тип результата Dispatcher по умолчанию:

<result name="Failure" type="dispatcher">/jsp/ShowActionErrror.jsp</result>

или просто

<result name="Failure">/jsp/ShowActionErrror.jsp</result>

Подробнее читайте в Настройка результатов.

person Andrea Ligios    schedule 03.09.2013

Используйте тип результата dispatcher с JSP

<result name="Failure" type="dispatcher">/jsp/ShowActionErrror.jsp</result>
person Roman C    schedule 03.09.2013
comment
Да, я уже пробовал с JSP. Работает нормально. Но почему это не работает с действием? - person john; 03.09.2013
comment
Потому что диспетчер не предназначен для переадресации на другое действие. - person Steven Benitez; 04.09.2013
comment
@john Struts2 никоим образом не одобряет цепочку действий, и вы даже не настроили действие, о котором говорите. Глядя на код в вашем вопросе, пользователь, не являющийся пользователем Struts1, будет означать, что вы использовали результат dispatcher с местоположением /ShowError.do, и Struts2 не будет его обслуживать, поскольку он не принимает переадресованные запросы. - person Roman C; 04.09.2013