我可以分开弹簧形式吗?

时间:2013-02-17 17:25:23

标签: spring-mvc tiles

我正在使用tiles,Spring MVC,Spring form标签。我想逐步制作一个表格。单击按钮时,显示来自其他切片定义的更多输入。但抛出异常却找不到“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

1 个答案:

答案 0 :(得分:0)

如果我读的是正确的,你想要的是一个“向导”形式,用户通过一系列步骤从一个表单传递到另一个表单。首先,我相信Spring Web Flow开箱即用,但是,如果像我一样,你不能使用Spring Web Flow,你可以手动完成。

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

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

最后,创建多个视图,每个视图都相同,但每个视图只包含您希望在此时在FormBean上设置的部分。你不能使用JSR 303,或者至少我不知道你怎么做,因为你不能在步骤之间完成验证。您必须自己完成验证。