使用SSH或Struts2框架时,通过ajax向后台发送请求,但请求无法跳转(在action方法的与第一行输出,但控制台不显示),这时候需要看是否是ajax传入的参数类型后台无法解析。
首先,更改struts.xml文件,详细打印错误信息:
<!-- 开发模式下使用,可以打印出更详细的错误信息 -->
<constant name="struts.devMode" value="true"></constant>
若后台输出于下图类似,则说明ajax的data参数类型与后台实体类型不符:
ERROR ParametersInterceptor Developer Notification (set struts.devMode to false to disable this message):
Unexpected Exception caught setting 'birthday' on 'class xxx.Action.xxxAction: Error setting expression 'birthday' with value ['Wed Nov 11 1992 08:00:00 GMT+0800 (中国标准时间)', ]
ERROR Dispatcher Could not find action or result: /xxx/project_loan
No result defined for action xxx.Action.xxxAction and result input - action - file:/E:/WorkSpace/JavaEE/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/xxx/WEB-INF/classes/struts.xml:27:63
at com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:377)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:279)
此处前端传入的birthday为Date类型 'Wed Nov 11 1992 08:00:00 GMT+0800 (中国标准时间)'
,后台java.util.Date不能正确地解析,所以在传值之前将其格式化即可。
var birthday = new Date($("#birthday").val());
var y = birthday.getFullYear();
var m = birthday.getMonth()+1;
var d = birthday.getDate();
birthday = y + "-" + (m>=10?m:('0'+m)) + "-" + (d>=10?d:('0'+d));
其他数据类型也类似格式化即可。
(一般Date类型存在问题可能性较大,关键是要详细打印开发模式错误信息,根据实际情况解决问题。)