struts2动作错误,fielderrors以json的形式返回并在表单上显示错误 - AJAX,Liferay Portal,Portlet

时间:2014-07-26 00:28:51

标签: regex json validation struts2 liferay

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

获得一个Action类,其中validate()方法在验证失败时返回带有actionErrorsfieldErrors的输入JSP。

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

JQuery用于客户端,Struts2用作MVC框架,Liferay用作Portal服务器。

以下是我尝试过的代码,

public void validate() { 
    setActionErrors(validateData(this));
}
<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>
<portlet:actionURL name="saveData" var="saveDataActionURL">
   <portlet:param name="struts.portlet.action" value="/saveDataAsync"/>
</portlet:actionURL>
jQuery.ajax({
            type: 'POST',
            url: "<%=saveDataActionURL%>", 
            data: jQuery("#form").serialize(),
            dataType: 'json',
            success: function(data) {

                alert("data" + data);
            }
});

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

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

1 个答案:

答案 0 :(得分: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,因此这些属性可用。