Проблема BindingResult с @ spring.formTextarea - PullRequest
0 голосов
/ 31 марта 2012

Здравствуйте, я использую Spring MVC с Freemarker.Сейчас я сталкиваюсь с тем, что контроллер возвращает список учеников.А внутри Freemarker я перебираю этот список и передаю возраст, свойство внутри студента,

spring.formTextarea

Я получаю исключение, упомянутое ниже.

Мой Freemarker:

[#list studentResults as studentInstance]
                    <td>${studentInstance.name}</td>
                    <td>[@spring.formTextarea path="{studentInstance}.age" attributes="class=\"input-large\" placeholder=\"Enter the name you need to search for \" "/]</td>
[/#list]

Исключение:

31 марта 2012 г. 5:13:42 freemarker.log.JDK14LoggerFactory $ JDK14Logger error SEVERE:

Метод public org.springframework.web.servlet.support.BindStatus org.springframework.web.servlet.support.RequestContext.getBindStatus (java.lang.String) создает исключение java.lang.IllegalStateException, когда вызывается на org.sprf.support.RequestContext@11fb8c6 с

аргументами типов [java.lang.String,] Проблемная инструкция:

==> назначение: status = springMacroRequestContext.getBindStatus (путь) [в строке 120, столбец 9 в spring.ftl] в пользовательской директиве bind [в строке 204, столбец 5 в spring.ftl] в пользовательской директиве spring.formTextarea

[в строке 39, столбец 25 в find.ftl]

Java backtrace для программистов: ---------- freemarker.template.TemplateModelException: метод public org.springframework.web.servlet.support.BindStatus org.springframework.web.servlet.support.RequestContext.getBindStatus (Java).lang.String) throws java.lang.IllegalStateException выдало исключение, когда вызвано на org.springframework.web.servlet.support.RequestContext@11fb8c6 с аргументами типов [java.lang.String,] в freemarker.ext.beans.Overodelethodexec (OverloadedMethodModel.java:134) в freemarker.core.MethodCall._getAsTemplateModel (MethodCall.java:93) в freemarker.core.Expression.getAsTemplateModel (Expression.java:89) в freemarker.core.Aavaignment.ac: 90) в freemarker.core.Environment.visit (Environment.java:209) в freemarker.core.IfBlock.accept (IfBlock.java:82) в freemarker.core.Environment.visit (Environment.java:209) в freemarker..core.MixedContent.accept (MixedContent.java:92) в freemarker.core.Environment.visit (Environment.java:209) в freemarker.core.Macro $ Context.runMacro (Macro.java:168) в freemarker.core.Environment.visit (Environment.java:602) в freemarker.core.UnifiedCall.accept (UnifiedCall.java:106) в freemarker.core.Environment.visit (Environment.java:209) в freemarker.core.MixedContent.accept (MixedContent.java:92) в freemarker.core.Environment.visit (Environment.java:209) в freemarker.core.Macro $ Context.runMacro(Macro.java:168) в freemarker.core.Environment.visit (Environment.java:602) в freemarker.core.UnifiedCall.accept (UnifiedCall.java:106) в freemarker.core.Environment.visit (Environment.java:209) в freemarker.core.MixedContent.accept (MixedContent.java:92) в freemarker.core.Environment.visit (Environment.java:209) в freemarker.core.IteratorBlock $ Context.runLoop (IteratorBlock.java:179) вfreemarker.core.Environment.visit (Environment.java:416) в freemarker.core.IteratorBlock.accept (IteratorBlock.java:102) в freemarker.core.Environment.visit (Environment.java:209) в freemarker.core.MixedContentПризнавайте (MixedContent.java:92) в freemarker.core.Environment.visit (Environment.java:209) в freemarker.core.ConditionalBlock.accept (ConditionalBlock.java:79) в freemarker.core.Environment.visit (Environment.java:209) в freemarker.core.MixedContent.accept (MixedContent.java:92) в freemarker.core.Environment.visit (Environment.java:209) в freemarker.core.Environment.process (Environment.java:189) в freemarker.template..Template.process (Template.java:237) в org.springframework.web.servlet.view.freemarker.FreeMarkerView.processTemplate (FreeMarkerView.java:366) вorg.springframework.web.servlet.view.freemarker.FreeMarkerView.doRender (FreeMarkerView.java:283) в org.springframework.web.servlet.view.freemarker.FreeMarkerView.renderMergedTemplateModel (FreeMarkerView.java:233) в org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel (AbstractTemplateView.java:167) в org.springframework.web.servlet.view.AbstractView.render (AbstractView.java:262) в org.springframework.web.servlet.DispatcherServlet.render (DispatcherServlet.java:1157) в org.springframework.web.servlet.DispatcherServlet.doDispatch (DispatcherServlet.java:927) в org.springframework.web.servlet.DispatcherServlet.doService (DispatcherServlet.java:827) в org.springframework.web.servlet.FrameworkServlet.processRequest (FrameworkServlet.java:882) в org.springframework.web.servlet.FrameworkServlet.doPost (FrameworkServlet.java:789) в javax.servlet.http.HttpServlet.service (HttpServlet.java:641) в javax.servlet.http.HttpServlet.service (HttpServlet.java:722) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:305) в org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:210) в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:224) в org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:169) в org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:472) в org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:168) в org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:98) в org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:927) в org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:118) в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:407) в org.apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor.java:987) в org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:579) в org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run (JIoEndpoint.java:309) в java.util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:885) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:907) at java.lang.Thread.run (Thread.java:619)

Причина:

java.lang.IllegalStateException: ни BindingResult, ни обычный целевой объект для имени бина '12222' доступен в качестве атрибута запроса на org.springframework.web.servlet.support.BindStatus. (BindStatus.java:141) в org.springframework.web.servlet.support.RequestContext.getBindStatus (RequestContext.java:722) at sun.reflect.GeneratedMethodAccessor26.invoke (неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) в java.lang.reflect.Method.invoke (Method.java:597) в freemarker.ext.beans.BeansWrapper.invokeMethod (BeansWrapper.java:840) в freemarker.ext.beans.OverloadedMethodModel.exec (OverloadedMethodModel.java:104) ... еще 60

Ответы [ 2 ]

0 голосов
/ 19 июля 2013

У меня тоже была такая же проблема textarea, где мне нужно заполнить значение modelAttribute, а также перехватить значение при отправке визуализированной формы.Я пробовал с <spring:bind> подходом, но он не работал - я продолжаю получать ошибку состояния привязки.

  1. В качестве альтернативы я добавил JavaScript для заполнения значения при загрузке страницы.

      function populateTextArea(){
        document.getElementById('description').value =
         document.getElementById('dummyDescription').value;
        }
        </script>
        </head>
        <body  onload="populateTextArea(); ">
    
  2. Однако для захвата значения я использовал элемент path.В том же подходе тег формы пружины использует:

    <sform:textarea path="description" id="description" value="${objectDTO.description}"/>
    <input type="hidden" id="dummyDescription" value="${objectDTO.description}"/>
    

Это может быть не хорошим подходом, а временным решением для любой ошибки привязки пружины.

0 голосов
/ 01 апреля 2012

Я полагаю, что путь может быть распознан для объектов commandName, объявленных на уровне spring: form, например, если вы хотите связать объект age с лицом, то вы должны были сделать как

<form:form action="/submit" commandName="person">
  <form:textArea path="age"/>
</form>

, выполнив это, он автоматически сопоставит атрибуту "персона" модели, которую вы привели с контроллера. В вашем случае я не думаю, что он будет автоматически привязывать возраст к текстовой области. Это всего лишь предположение, я не уверен, как вы выводите весь список studentResults из контроллера, а также как вы связали компонент поддержки формы между контроллером и представлением.

...