2013-02-17 42 views
0

我使用瓷砖,Spring MVC,Spring窗体标签。我想逐步形成一个表格。当点击一个按钮时,显示来自另一个瓷砖定义的更多输入。但是抛出一个异常找不到“BindingResult和bean名称的普通目标对象”,它看起来“更多的输入”不能从以前的请求中获取bindle对象,是不是?我可以分开一个弹簧表单吗?

的源代码:

<form:form action="/saveTicker.do" commandName="ticker" modelAttribute="ticker" method="post"> 
... 
<form:input path="name" id="name"/> 
<a href="#" class="btn" onclick="confirmTicker();">Confirm</a> 
<div class="row" id="filelist"> 
</div> 
</form> 

JS

var confirmTicker=function(){ 
var ticker=$('input:text').val(); 
$.get("/confirmTicker.do",{ticker:ticker}).success(function(data){ 
    $('#filelist').html(data); 
}); 

}

要导入另一个文件

<table class="table "> 
<c:forEach var="f" items="${fileList}"> 
    <tr> 
     <td> 
      <form:checkbox path="files" value="${f}"></form:checkbox> 
     </td> 
    </tr> 
</c:forEach> 
</table> 

的错误是

Neither BindingResult nor plain target object for bean name 'files' available as request attribute 
+0

你可以发布控制器方法代码吗? – 2013-02-18 05:07:30

+0

使用commandName或modelAttribute;不是都。并且您是否在模型中添加了“ticker”。 [**检查我的答案这里**](http://stackoverflow.com/questions/8781558/neither-bindingresult-nor-plain-target-object-for-bean-name-available-as-request/8785223#8785223 )。可能有帮助。 – Vinay 2013-02-18 09:11:23

回答

0

如果我正在阅读此内容,那么您需要的是一个“向导”表单,其中用户从一个表单传递到下一个表单作为一系列步骤。首先,我相信Spring Web Flow可以实现这一功能,但是,如果像我一样,您不能使用Spring Web Flow,则可以手动执行此操作。

首先,您需要一个Form Bean(读取Command对象),它具有所有表单的所有可能输入。

接下来,您将拥有一个Controller方法来接受您的Form Bean并返回适当的步骤(这是我所做的),或者您可以有多个方法......无关紧要。您将在处理程序方法上使用@ModelAttribute注释将表单Bean绑定到视图表单。此外,@SessionAttributes注释在控制器的顶部将表单Bean设置为会话属性。确保@ModelAttribute,@SessionAttribute和视图的名称都对应于相同的属性名称。

最后,创建多个视图,每个视图都相同,但每个视图都只有您想要在FormBean上设置的部分。你不能使用JSR 303,或者至少我不知道你能怎么做,因为你不能在步骤之间进行验证。您将不得不自行处理验证。

+0

它看起来有点难,只是找到了一个简单的解决方案,使用jquery加载一个新的表单来代替旧的表单。 – atu0830 2013-03-16 01:52:18

相关问题