您好我使用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多个
答案 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>
方法,但它不起作用 - 我继续收到绑定状态错误。
作为替代方案,我添加了一个JavaScript来填充pageload上的值。
function populateTextArea(){
document.getElementById('description').value =
document.getElementById('dummyDescription').value;
}
</script>
</head>
<body onload="populateTextArea(); ">
然而,为了捕获值,我使用了path元素。弹簧形式标签使用相同的方法:
<sform:textarea path="description" id="description" value="${objectDTO.description}"/>
<input type="hidden" id="dummyDescription" value="${objectDTO.description}"/>
这可能不是一个好方法,而是任何弹簧绑定错误的临时解决方案。