如何以 JSON 形式返回 ActionErrors、FieldErrors 并使用 AJAX 在表单上显示错误

问题描述 投票:0回答:1

我想知道是否有人可以对以下内容提出任何想法。

得到一个

Action
类,其中
validate()
方法返回 JSP
input
结果,并在验证失败时使用
actionErrors
fieldErrors

我只想获取验证错误(JSON 数据?)并在现有页面上显示错误并突出显示字段,而不是使用新响应 JSP 刷新整个 JSP。

客户端使用JQuery,Struts 2作为MVC框架,Liferay作为Portal服务器。

以下是我尝试过的代码:

public void validate() { 
    setActionErrors(validateData(this));
}

struts.xml
:

<result-types>
        <result-type name="json" class="org.apache.struts2.json.JSONResult"/>
</result-types>
    
<interceptors>
    <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
</interceptors>             


<action name="saveDataAsync" class="MyActionClass" method="addDataAsync">
    <result name="success">/jsp/addDataAsync.jsp</result>
    <result name="input" type="json">
    </result>
</action>

JSP:

<portlet:actionURL name="saveData" var="saveDataActionURL">
   <portlet:param name="struts.portlet.action" value="/saveDataAsync"/>
</portlet:actionURL>

JS:

jQuery.ajax({
            type: 'POST',
            url: "<%=saveDataActionURL%>", 
            data: jQuery("#form").serialize(),
            dataType: 'json',
            success: function(data) {
            
                alert("data" + data);
            }
});

执行

validate()
方法后,流程正在执行动作类的默认方法,即使有错误添加到错误列表中,并通过
setActionErrors()
方法设置。当拦截器和
"input"
方法被调用时,我可以看到 resultcode: as
"jsonresult"
和 result: as
invoke()

我真的很感谢对这个问题的任何帮助。

java json validation struts2 liferay
1个回答
1
投票

您可以将

INPUT
结果配置为
json
类型的操作,并使用
includeProperties
参数指定生成的 JSON。

<result name="input" type="json">
  <param name="ignoreHierarchy">false</param>
  <param name="includeProperties">^actionErrors\[\d+\],^fieldErrors\['\w+'\]\[\d+\]</param>
</result>

动作类应该扩展

ActionSupport
,这样这些属性才可用。

© www.soinside.com 2019 - 2024. All rights reserved.