Struts2 java.lang.NoSuchMethodException - PullRequest
       11

Struts2 java.lang.NoSuchMethodException

2 голосов
/ 19 августа 2011

У меня проблема со Struts2, в моем ActionClass я объявил:

private Integer table; + setter and getter methods

, тогда у меня есть форма в .jsp:

<s:form action="add-note" theme="simple">

            <s:select name="table" list="tablesList.{tableNr}" cssClass="tables" headerValue="-- Select table --" headerKey="-1"/>

</s:form>

Но когда я пытаюсьотправить эту форму, я получаю очень странное исключение:

19 августа 2011 15:17:28 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn ПРЕДУПРЕЖДЕНИЕ:Ошибка установки выражения 'таблица' со значением '[Ljava.lang.String; @ 3052ab' ognl.MethodFailedException: сбой метода «setTable» для объекта com.deveto.struts.actions.NotesAction@835dc6 [java.lang.NoSuchMethodException: com.deveto.struts.actions.NotesAction.setTable ([Ljava.lang.String;)] в ognl.OgnlRuntime.callAppresponMethod (OgnlRuntime.java:1285) в ognl.OgnlRuntime.setMethodValue (ognlRuntime)..ObjectPropertyAccessor.setPossibleProperty (ObjectPropertyAccessor.java:85) в ognl.ObjectPropertyAccessor.setProperty (ObjectPropertyAccessor.java:162) в com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.setorj (в ognl.OgnlRuntime.setProperty (OgnlRuntime.java:2245) в com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.setProperty (CompoundRootAccessor.java:77) в ognl.OgnlRuntime.setPro45.ASTProperty.setValueBody (ASTProperty.java:127) в ognl.SimpleNode.evaluateSetValueBody (SimpleNode.java:220) в ognl.SimpleNode.setValue (SimpleNode.java:301) в ognl.Ognl.setValuecom.opensymphony.xwork2.ognl.OgnlUtil.setValue (OgnlUtil.java:209) в com.opensymphony.xwork2.ognl.OgnlValueStack.trySetValue (OgnlValueStack.java:173) в com.opensymphal.Ogn.Ogn.Ogn.Ogn.OgnOgnlValueStack.java:160) в com.opensymphony.xwork2.ognl.OgnlValueStack.setValue (OgnlValueStack.java:151) в com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters (параметры_java) 28.interceptor.ParametersInterceptor.doIntercept (ParametersInterceptor.java:199) в com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept (MethodFilterInterceptor.java:98) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:248) в org.apache.struts2.interceptor.CheckboxInterceptor.intercept (CheckboxIntercepty at. com:.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:248) в org.apache.struts2.interceptor.FileUploadInterceptor.intercept (FileUploadInterceptor.java:243) в com.opensymphony.xwork2.DefaultActionInvocation (inocation).org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept (ProfilingActivationInterceptor.java:104) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:248) в org.apache.strutsInugorceptor.DebuggingInterceptor.java:270) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:248) в com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept (цепочкаInterceptor.java:145) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:248) в com.opensymphony.xwork2.interceptor.I18nИнтерцептор.intercept (I18nInceptceptor.java:176) при атаке на доступ к данным..invoke (DefaultActionInvocation.java:248) в com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept (PrepareInterceptor.java:171) в com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept: methodorjj.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.java: 187) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:248) в com.deveto.struts.interceptors.LocaleInterceptor.intercept (LocaleInterceptor.java:62) в com.opensymphocation.AxIninvoke (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.ExecuteOperations.executeAction (ExecuteOperations.java:77) в org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter (StrutsPrepareAndExecuteFilter.java:91)..яnternalDoFilter (ApplicationFilterChain.java:235) в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) в org.apache.catalina.core..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) в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:298) в org.apache.coyote.ht.Http11Processor.process (Http11Processor.java:852) в org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process (Http11Protocol.java:588) в org.apache.tomcat.util.net.JIoEnd:java: 489) at java.lang.Thread.run (Thread.java:662). Причина: java.lang.NoSuchMethodException: com.deveto.struts.actions.NotesAction.setTable ([Ljava.lang.String;) в ognl.OgnlRuntime.callAppresponMethod (OgnlRuntime.java:1226) ... еще 56

/ - инкапсулированное исключение ------------ \ java.lang.NoSuchMethodException: com.deveto.struts.actions.NotesAction.setTable ([Ljava.lang.String;) в ognl.OgnlRuntime.callAppresponMethod (OgnlRuntime.java:1226) в ognl..ObjectAccessor.setProperty (ObjectAccessor.java:27) в ognl.OgnlRuntime.setProperty (OgnlRuntime.java:2245) в com.opensymphony.xwork2.ognl.accessor.CompoundRootAccessor.setProperty (CompoundRootlgn.ojjjl)setProperty (OgnlRuntime.java:2245) в ognl.ASTProperty.setValueBody (ASTProperty.java:127) в ognl.SimpleNode.evaluateSetValueBody (SimpleNode.java:220) в ognl.SimpleNode.setValue (SimpleNode.java:301) в ognl.Ognl.setValue (Ognl.java:737) в com.opensymphony.xwork2.ognl.OgnlUtil.setValue (OgnlUtil.java:209) в com.opensymphony.x.ognl.) в com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters (ParametersInterceptor.java:288)в com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept (ParametersInterceptor.java:199) в com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept (MethodFilterInterceptor.java:98) по умолчанию.java: 248) в org.apache.struts2.interceptor.CheckboxInterceptor.intercept (CheckboxInterceptor.java:94) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:248) в org.apache.orts2.ceptFileUploadInterceptor.intercept (FileUploadInterceptor.java:243) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:248) в org.apache.struts2.interceptor.ProfilingActivationInterceptor.java.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.interceptor.ChainingInterceptor.intercept (ChainingInterceptor.java:145) в com.opensymphony.xwork2.DefaultActionInvovInvokeв com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept (I18nInterceptor.java:176) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:248) в com.opensymphony.xworkrepororceptorceptor.java: 171) в com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept (MethodFilterInterceptor.java:98) в com.opensymphony.xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:248y) в comopop.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 (LocaleInterensy. comcept.ava) atj..xwork2.DefaultActionInvocation.invoke (DefaultActionInvocation.java:248) в org.apache.struts2.impl.StrutsActionProxy.execute (StrutsActionProxy.java:52) в org.apache.struts2.dispatcher.Dispatcher.serviceAction:49patcher.) в org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction (ExecuteOperations.java:77) в org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter (StrutsPrepareAndExecuteFilache.g.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:235) в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:206) в org.apache.233) на org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:191) в org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:127) в org.apache.catalina.valves.EvalinRevevevo (ReportReport)102) в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:109) в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:298) в org.apache.coyote.htp11.process (Http11Processor.java:852) в org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process (Http11Protocol.java:588)в org.apache.tomcat.util.net.JIoEndpoint $ Worker.run (JIoEndpoint.java:489) at java.lang.Thread.run (Thread.java:662)

Извините за трассировку стека;

Ответы [ 2 ]

7 голосов
/ 21 февраля 2012

I отправил этот же ответ на другой вопрос ранее, но он также может иметь отношение к этому вопросу:

Проблема NoSuchMethodException ... ([Ljava.lang.String;)] может быть вызвана наличием нескольких атрибутов с одинаковым именем в HTTP-запросе.

Если допустим случай с несколькими атрибутами с одним и тем же именем, вы можете обработать несколько значений идентификатора, изменив setId (int id) на setId (String [] idArray) и проанализировав каждую строку члена массива как целое число.

Убедитесь, что в классе действия есть только один метод 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 ...
    }
}
3 голосов
/ 19 августа 2011

<select> возвращает строковое значение, и вы пытаетесь присвоить это значение целочисленной переменной table

Объявите table как String (с getter / setter), и если вы хотите использовать его целочисленное значение, используйте метод parseInt()

 integerValue = Integer.parseInt(table)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...