我的Struts2有问题,在我的ActionClass中我声明了一个:
private Integer table; + setter and getter methods
Run Code Online (Sandbox Code Playgroud)
然后我在.jsp中有一个表单:
<s:form action="add-note" theme="simple">
<s:select name="table" list="tablesList.{tableNr}" cssClass="tables" headerValue="-- Select table --" headerKey="-1"/>
</s:form>
Run Code Online (Sandbox Code Playgroud)
但是当我尝试提交此表单时,我得到一个非常奇怪的例外:
2011年8月19日下午3:17:28 com.opensymphony.xwork2.util.logging.commons.CommonsLogger警告警告:错误设置表达式'table'的值为'[Ljava.lang.String; @ 3052ab'ognl.MethodFailedException:Method对象com.deveto.struts.actions.NotesAction@835dc6 [java.lang.NoSuchMethodException:com.deveto.struts.actions.NotesAction.setTable([Ljava.lang.String;)] 在ognl.OgnlRuntime的"setTable"失败.在ognl.Orl上运行的ognl.Orn.Rertime.Avl中,调用了适当的方法(OgnlRuntime.java:1285)ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85),ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162).在com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.setProperty(CompoundRootAccessor.java)的ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2245)上的opensymphony.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:27): 77)在ognl.ASTProperty.setValueBo的ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2245)dy(ASTProperty.java:127)at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)at ognl.SimpleNode.setValue(SimpleNode.java:301)at ognl.Ognl.setValue(Ognl.java:737)at com.在com.opensymphony.xwork2.ognl.OgnlValueStack.trySetValue(OgnlValueStack.java:173)的com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.)中的opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:209). java:160)com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:151)at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:288)at com.opensymphony.xwork2.interceptor .ParametersInterceptor.doIntercept(ParametersInterceptor.java:199)at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)at org. com.ope上的apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)nsymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)在org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)在org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)在org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept (DebuggingInterceptor.java:270)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)位于com.opensymphony.xwork2的com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145). com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)的com.opensymphony.xwork2.DefaultAction的DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)调用com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)的com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)中的Invocation.invoke(DefaultActionInvocation.java:248) .opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)在com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248 )在com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)在com.deveto.struts.interceptors.LocaleInterceptor.intercept( LocaleInterceptor.java:62)位于org.apache.struts2.impl.StrutsActionProxy.exe的com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)(StrutsActionProxy.java:52 )org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498)位于org.apache.struts2.dispatcher的org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77). org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)中的ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 206)在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)在org.apache.catalina.core.StandardHostValve .invoke(StandardHostValve.java:127)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org. org.ap上的apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)ache.coyote.http11.Http11Processor.process(Http11Processor.java:852)org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:588)at org.apache.tomcat.util.net.JIoEndpoint $ java.lang.Thread.run中的Worker.run(JIoEndpoint.java:489)(Thread.java:662)引起:java.lang.NoSuchMethodException:com.deveto.struts.actions.NotesAction.setTable([Ljava.lang .string;)at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1226)... 56更多
/ - 封装异常------------\java.lang.NoSuchMethodException:com.deveto.struts.actions.NotesAction.setTable([Ljava.lang.String;) at ognl.OgnlRuntime.callAppropriateMethod (OgnlRuntime.java:1226)ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1474)位于ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)的ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)com.opensymphony位于ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2245)的.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:27)at com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.setProperty(CompoundRootAccessor.java:77 )在ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2245)在ognl.ASTProperty.setValueBody(ASTProperty.java:127)在ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)在ognl.SimpleNode.setValue(SimpleNode.java :301)at ognl.Ognl.setValue(Ognl.java:737)at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:209)在com.opensymphony.xwork2.ognl.OgnlValueStack.trySetValue(OgnlValueStack.java:173)在com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:160)在com.opensymphony.xwork2.ognl.OgnlValueStack.setValue (OgnlValueStack.java:151)com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:288)位于com.opensymphony的com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:199). xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)在org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)atg.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(De faultActionInvocation.java:248)在org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)在org.apache.struts2.interceptor .debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:270)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)在com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java: 248)com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInte)rceptor.java:98)com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)at com.opensymphony.xwork2.DefaultActionInvocation .invoke(DefaultActionInvocation.java:248)在com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)在com.deveto. struts.interceptors.LocaleInterceptor.intercept(LocaleInterceptor.java:62)在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)在org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498)位于org.apache.struts2.dispatcher.ng的org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) .filter.StrutsPrepareAndExecu org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)的teFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org .apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve .java:127)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)位于org.apache.catalina的org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109). connector.CoyoteAdapter.service(CoyoteAdapter.java:298)在org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)在org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java: 588)at org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:4 89)在java.lang.Thread.run(Thread.java:662)
对不起堆栈跟踪;
我之前在另一个问题上发布了相同的答案,但它也可能与这个问题相关:
NoSuchMethodException ...([Ljava.lang.String;)]问题可能是由HTTP请求中具有相同名称的多个属性引起的.
如果具有相同名称的多个属性的情况是合法的,则可以通过将setId(int id)更改为setId(String [] idArray)并将每个数组成员字符串解析为整数来处理多个id值.
确保action类中只有一个setId方法(setId(String [] idArray)).如果有多个方法具有相同的名称但参数类型不同,那么某些版本的struts/ognl(ognl 3.0.4?)可能会混淆.
例如:
public void setId(String[] idArray) {
for (String idString : idArray) {
int id = Integer.parseInt(idString);
... handle different id values somehow ...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11014 次 |
| 最近记录: |