最近一次系统升级,随机出现编辑原来数据库数据失败问题,而如果修改这个action所有数据则可以成功,新添加再修改也可以成功。跟踪发现系统报错:
No result defined for action com.jim.web.action.appointment.AppointmentAction and result input
com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:376)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:278)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
再到代码中跟踪发现:
WARN OgnlValueStack:60 - Error setting expression 'appointment.customerId' with value '[Ljava.lang.String;@15475116'
ognl.MethodFailedException: Method "setCustomerId" failed for object com.jim.bean.appointment.Appointment@18f75278 [java.lang.NoSuchMethodException: com.jim.bean.appointment.Appointment.setCustomerId([Ljava.lang.String;)]
.............................................................................................................
Caused by: java.lang.NoSuchMethodException: com.jim.bean.appointment.Appointment.setCustomerId([Ljava.lang.String;)
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1233)
... 67 more
/-- Encapsulated exception ------------\
java.lang.NoSuchMethodException: com.jim.bean.appointment.Appointment.setCustomerId([Ljava.lang.String;)
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1233)
............................................................................................................
\--------------------------------------/
09:25:59,222 ERROR Dispatcher:38 - Could not find action or result
/blackfoot/pages/booking/editAppointmentByJsonAction
No result defined for action com.jim.web.action.appointment.AppointmentAction and result input
发现是bean映射时变量类型错误导致请注意一下信息
“Error setting expression 'appointment.customerId' with value '[Ljava.lang.String”
在bean appointment中“customerId”是Integer类型,但jsp和js却直接映射成String,导致异常发什么。
在js中原来为
"appointment.customerId" :$("#customerId").val(),
jquery 从input获得的是一个String类型值,改正为获得值后直接强制转化为10进制 Integer类型
"appointment.customerId" :parseInt($("#customerId").val(),10),
后面“10”表示10进制,如果为“8”则为8进制,以此类推
问题解决。