我想知道是否有人可以对以下内容提出任何想法。
获得一个Action类,其中validate()
方法在验证失败时返回带有actionErrors
,fieldErrors
的输入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"
。
我真的很感激这个问题的任何帮助。
答案 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
,因此这些属性可用。