Я делаю посты JQuery Ajax и хотел бы, чтобы любые actionmessages
, actionerrors
и fielderrors
были добавлены в действие назад в ответе (в формате JSON).
Я добавил этот результат:
<result name="input" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">fieldErrors,actionErrors</param>
</result>
к моей конфигурации действий в struts.xml
.
Я получаю: {"actionErrors":[],"fieldErrors":{}}
обратно как ответ, несмотря на наличие ошибок поля в стеке значений.
Если я изменю свою конфигурацию результатов на:
<result name="input" type="json">
<param name="ignoreHierarchy">false</param>
<param name="root">fieldErrors</param>
</result>
ответ JSON ожидаемый:
{"thePropertyWithValidationError":["You must supply correct information."]}
Мне бы очень хотелось, чтобы как ошибки действий, так и ошибки полей были включены в ответ, если это возможно.
Есть идеи? Заранее большое спасибо !!
Edit:
Я думаю, что мне может понадобиться использовать какое-то регулярное выражение ... Я попытался:
<result name="input" type="json">
<param name="ignoreHierarchy">false</param>
<param name="includeProperties">fieldErrors\[\d+\],actionErrors\[\d+\]</param>
</result>
с тем же результатом:
{"actionErrors":[],"fieldErrors":{}}
Я также нашел это сообщение об ошибке , которое может способствовать моим проблемам, так как я использую Struts v2.2.1. (v2.2.2 еще не вышел)
Редактировать # 2:
Возможно, JSONValidationInterceptor - это то, что мне нужно ... Кажется, я не могу понять, как использовать его с моими пользовательскими сообщениями JQuery Ajax ...
Я использую перехватчик json для заполнения своих свойств. Ниже приведена конфигурация моего действия:
<action name="MyAction" method="add" class="com.test.actions.MyAction">
<interceptor-ref name="json" />
<interceptor-ref name="jsonValidationWorkflowStack"/>
<interceptor-ref name="MyCustomInterceptor" />
<result name="success" type="json" />
</action>
Я пишу:
{"struts.enableJSONValidation":"true", "testProperty":"true"}
Ответ просто пересылается на мое глобальное отображение результатов error.jsp (с ошибками поля, отображаемыми в том виде, в котором я настроил их отображение в error.jsp):
<global-results>
<result name="error">/WEB-INF/jsp/error.jsp</result>
<result name="Exception">/WEB-INF/jsp/error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Throwable" result="Exception" />
</global-exception-mappings>
Полагаю, я ожидал, что если в стеке появятся fielderrors / actionerrors, они будут возвращены как JSON?