Я создаю записи JQuery Ajax и хотел бы, чтобы в действии в ответ (в формате JSON) добавлены теги actionmessages
, actionerrors
и fielderrors
.
Я добавил этот результат:
<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>
Я предполагаю, что ожидал, что если в стеке будут филдерсы /actionerrors, они будут возвращены как JSON?