Struts2 addActionError, дубликат ошибки в jsp

Я сталкиваюсь со странной ошибкой, используя метод addActionError в struts2.

Мой код в классе действий:

this.addActionError(e.getMessage()); 
forward = ERROR;

STRUTS.xml:

 <action name="test" class="test">
    <result name="success">/struts/success.jsp</result>
    <result name="error">/struts/error.jsp</result>
    <interceptor-ref name="MyInterceptorStack" />
</action>

где MyInterceptorStack:

<interceptor-stack name="MyInterceptorStack">
    <interceptor-ref name="alias" />
    <interceptor-ref name="servletConfig" />
    <interceptor-ref name="prepare" />
    <interceptor-ref name="i18n" />
    <interceptor-ref name="chain" />
    <interceptor-ref name="debugging" />
    <interceptor-ref name="profiling" />
    <interceptor-ref name="scopedModelDriven" />
    <interceptor-ref name="modelDriven" />
    <interceptor-ref name="fileUpload" />
    <interceptor-ref name="checkbox" />
    <interceptor-ref name="staticParams" />
    <interceptor-ref name="params">
            <param name="excludeParams">dojo\..*</param>
    </interceptor-ref>
    <interceptor-ref name="conversionError" />
    <interceptor-ref name="DeltaInterceptor" />
    <interceptor-ref name="validation">
            <param name="excludeMethods">
                    input,back,cancel,browse
            </param>
    </interceptor-ref>
    <interceptor-ref name="workflow">
            <param name="excludeMethods">
                    input,back,cancel,browse
            </param>
    </interceptor-ref>
</interceptor-stack>

Мой JSP:

<div><s:actionerror/></div>

Сообщение должно быть: введите здесь описание изображения

Но результат дублируется следующим образом:

введите здесь описание изображения


person newbie    schedule 23.10.2012    source источник
comment
Есть ли веская причина определять свой собственный стек перехватчиков и не использовать стек по умолчанию?   -  person Aleksandr M    schedule 23.10.2012
comment
@AlekdandrM Вероятно, из-за пользовательского перехватчика.   -  person Dave Newton    schedule 23.10.2012
comment
Я бы сначала посмотрел исходный код DeltaInterceptor, чтобы увидеть, что он делает - необычная ошибка в сочетании с нестандартным перехватчиком...   -  person user497087    schedule 24.10.2012
comment
Как вы настроили свой DeltaInterceptor?   -  person MohanaRao SV    schedule 27.10.2012


Ответы (1)


Установлено ли struts.xwork.chaining.copyErrors = true в вашем файле struts.properties или struts.xml?

Это переопределит нормальное поведение, дав перехватчику цепочек возможность сохранять сообщения об ошибках действий через цепочки... кто знает, как он будет действовать без цепочек (возможно, он копирует их одинаково, если вы используете перехватчик цепочек только с цепочками результатов, когда для этого var установлено значение true)...

просто попытка.

РЕДАКТИРОВАТЬ: можете ли вы распечатать строку из java при добавлении сообщения?

this.addActionError(e.getMessage()); 
System.out.println("Setting action error");
forward = ERROR;

просто чтобы проверить, что действие не вызывается дважды по какой-то причине...

person Andrea Ligios    schedule 23.10.2012
comment
Тем не менее, это перехватчик цепочки, который использует эту настройку, IIRC, хотя я мог ошибаться. - person Dave Newton; 23.10.2012
comment
Абсолютно Дэйв, я написал это. Мое предположение было таково: если вы установите этот конкретный параметр для перехватчика цепочки и используете стек с перехватчиком цепочки (например, тот, который он использует), МОЖЕТ БЫТЬ, что функциональность ошибок копирования выполняется даже для нецепочечных сопоставлений... это просто попытка, как я уже сказал, никогда не говори никогда... - person Andrea Ligios; 23.10.2012