与@ spring.formTextarea的BindingResult问题

时间:2012-03-31 03:23:14

标签: spring-mvc freemarker

您好我使用Spring MVC和Freemarker。 我现在面对的情况是控制器返回一个Student列表。 从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]
  

例外:

     
    

2012年3月31日上午5:13:42 freemarker.log.JDK14LoggerFactory $ JDK14Logger     错误严重:

         

方法public org.springframework.web.servlet.support.BindStatus     org.springframework.web.servlet.support.RequestContext.getBindStatus(java.lang.String中)     抛出java.lang.IllegalStateException在调用时抛出异常     在org.springframework.web.servlet.support.RequestContext@11fb8c6上

         

类型的参数[java.lang.String,]有问题的指令:

  
     

==&GT;赋值:status = springMacroRequestContext.getBindStatus(path)[在第120行,spring.ftl第9列] in user-directive bind [on line]   用户指令spring.formTextarea

中的204,spring.ftl]中的第5列      

[第39行,find.ftl第25列]

     

程序员的Java回溯:   ---------- freemarker.template.TemplateModelException:方法public org.springframework.web.servlet.support.BindStatus   org.springframework.web.servlet.support.RequestContext.getBindStatus(java.lang.String中)   抛出java.lang.IllegalStateException在调用时抛出异常   在org.springframework.web.servlet.support.RequestContext@11fb8c6上   类型[java.lang.String,] at的参数   freemarker.ext.beans.OverloadedMethodModel.exec(OverloadedMethodModel.java:134)     at freemarker.core.MethodCall._getAsTemplateModel(MethodCall.java:93)     at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)     在freemarker.core.Assignment.accept(Assignment.java:90)at   freemarker.core.Environment.visit(Environment.java:209)at   freemarker.core.IfBlock.accept(IfBlock.java:82)at   freemarker.core.Environment.visit(Environment.java:209)at   freemarker.core.MixedContent.accept(MixedContent.java:92)at   freemarker.core.Environment.visit(Environment.java:209)at   freemarker.core.Macro $ Context.runMacro(Macro.java:168)at   freemarker.core.Environment.visit(Environment.java:602)at   freemarker.core.UnifiedCall.accept(UnifiedCall.java:106)at   freemarker.core.Environment.visit(Environment.java:209)at   freemarker.core.MixedContent.accept(MixedContent.java:92)at   freemarker.core.Environment.visit(Environment.java:209)at   freemarker.core.Macro $ Context.runMacro(Macro.java:168)at   freemarker.core.Environment.visit(Environment.java:602)at   freemarker.core.UnifiedCall.accept(UnifiedCall.java:106)at   freemarker.core.Environment.visit(Environment.java:209)at   freemarker.core.MixedContent.accept(MixedContent.java:92)at   freemarker.core.Environment.visit(Environment.java:209)at   freemarker.core.IteratorBlock $ Context.runLoop(IteratorBlock.java:179)     在freemarker.core.Environment.visit(Environment.java:416)at   freemarker.core.IteratorBlock.accept(IteratorBlock.java:102)at   freemarker.core.Environment.visit(Environment.java:209)at   freemarker.core.MixedContent.accept(MixedContent.java:92)at   freemarker.core.Environment.visit(Environment.java:209)at   freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:79)at   freemarker.core.Environment.visit(Environment.java:209)at   freemarker.core.MixedContent.accept(MixedContent.java:92)at   freemarker.core.Environment.visit(Environment.java:209)at   freemarker.core.Environment.process(Environment.java:189)at   freemarker.template.Template.process(Template.java:237)at   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)at   javax.servlet.http.HttpServlet.service(HttpServlet.java:722)at at   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)     在java.lang.Thread.run(Thread.java:619)

引起:

  

java.lang.IllegalStateException:既不是BindingResult也不是plain   bean名称的目标对象&#39; 12222&#39;可用作请求属性   org.springframework.web.servlet.support.BindStatus。(BindStatus.java:141)     在   org.springframework.web.servlet.support.RequestContext.getBindStatus(RequestContext.java:722)     at sun.reflect.GeneratedMethodAccessor26.invoke(Unknown Source)at   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)     在java.lang.reflect.Method.invoke(Method.java:597)at   freemarker.ext.beans.BeansWrapper.invokeMethod(BeansWrapper.java:840)     在   freemarker.ext.beans.OverloadedMethodModel.exec(OverloadedMethodModel.java:104)     ...还有60多个

2 个答案:

答案 0 :(得分:0)

我相信在spring:form级别声明的commandName对象可以识别路径,例如,如果你想绑定person对象的年龄那么你应该像

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

通过执行此操作,它将自动映射到您从控制器带来的modelAttribute“person”。在你的情况下,我不这么认为它会自动将年龄绑定到文本区域。这只是一个猜测,我不确定你是如何从控制器中提取整个studentResults列表的,以及如何在控制器和视图之间绑定表单支持bean。

答案 1 :(得分:0)

我也有同样的textarea问题,我需要填充modelAttribute值,并在提交渲染表单时捕获值。   我尝试使用<spring:bind>方法,但它不起作用 - 我继续收到绑定状态错误。

  1. 作为替代方案,我添加了一个JavaScript来填充pageload上的值。

      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}"/>
    
  3. 这可能不是一个好方法,而是任何弹簧绑定错误的临时解决方案。