Spring mvc Spring3复选框列表对象具有空属性

Spring mvc Spring3复选框列表对象具有空属性,spring-mvc,Spring Mvc,我可能在这里迷失了方向,但是我来自一个MVC.NET的世界,我一辈子都想不出这一点。我没有收到任何错误消息,但表单提交时提交的所有对象属性都为空。对象本身不是空的,只是它们的属性 我所要做的就是在表单提交后,在表单上有一系列由复选框表示的对象。这是一个有点棘手,因为你可以看到嵌套列表安排。视图在GET请求时呈现得非常完美,但在发布到服务器时似乎忘记了一切。有人有这样的例子吗?有人能告诉我为什么我所有的东西都松了绑吗 我的控制器: @RequestMapping(value="/Search",

我可能在这里迷失了方向,但是我来自一个MVC.NET的世界,我一辈子都想不出这一点。我没有收到任何错误消息,但表单提交时提交的所有对象属性都为空。对象本身不是空的,只是它们的属性

我所要做的就是在表单提交后,在表单上有一系列由复选框表示的对象。这是一个有点棘手,因为你可以看到嵌套列表安排。视图在GET请求时呈现得非常完美,但在发布到服务器时似乎忘记了一切。有人有这样的例子吗?有人能告诉我为什么我所有的东西都松了绑吗

我的控制器:

@RequestMapping(value="/Search", method = RequestMethod.GET)
public String search(Model model)
{
    Period periods = new Period();

    SearchModel search = new SearchModel();
    search.periods = periods.BuildPeriodList();

    model.addAttribute("periods", periods.BuildPeriodList());
    model.addAttribute(search);

    return "search";
}

@RequestMapping(value = "/Search", method = RequestMethod.POST)
public String search(@ModelAttribute("searchModel") SearchModel search, BindingResult result)
{         
    System.out.println(Arrays.deepToString(search.periods));

    return "search";
}
我的看法是:

<div id="searchPage">
<div id="searchForm">
    <form:form action="Search" method="post" modelAttribute="searchModel">
        <h2>Search</h2>
        <h2>Periods</h2>

        <c:forEach items="${periods}" var="period" varStatus="index">

            <form:checkbox path="periods[${index.count - 1}]" id="${period.name}" name="${period.name}" value="${period.name}"/>
            <label for="${period.name}">${period.displayName}</label>

            <div class="subPeriods">
            <c:forEach items="${period.subPeriods}" var="subPeriod" varStatus="subIndex">

                <form:checkbox path="periods[${subIndex.count - 1}].subPeriods" id="${subPeriod.name}" name="${subPeriod.name}" value="${period.name}"/>
                <label for="${subPeriod.name}">${subPeriod.displayName}</label>

            </c:forEach>
            </div>

        </c:forEach>
        <div class="clear"></div>
        <h2>Extras</h2>
        <form:checkbox path="hasImage" name="hasImage" id="hasImage"></form:checkbox>
        <label for="hasImage">Image</label>
        <form:checkbox path="hasPaper" name="hasPapaer" id="hasPapaer"></form:checkbox>
        <label for="hasPaper">Paper Data</label>
        <form:checkbox path="hasExtended" name="hasExtended" id="hasExtended"></form:checkbox>
        <label for="hasExtended">Extended Info</label>
        <input type="submit" name="search" value="Search"></input>
    </form:form>
</div>
<div id="searchResults">

</div>
<div class="clear"></div>

搜寻
时期
${period.displayName}
${subPeriod.displayName}
额外费用
形象
纸质数据
扩展信息

这是因为您的一些复选框被绑定到“时段”模型,而其他复选框被绑定到您的SearchModel模型。form:checkbox元素的path属性告诉我们如何绑定信息

在您的SearchModel中包含此内容,或者在POST方法中使用另一个@ModelAttribute(“句点”)

我建议您坚持使用一个模型,另外我不确定控制器方法中是否可以有多个@modeltribute,不过有些东西需要尝试