我想知道是否有人可以对以下内容提出任何想法。
得到一个
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()
。
我真的很感谢对这个问题的任何帮助。
您可以将
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
,这样这些属性才可用。