2012-06-26 62 views
0

我可能会绝望地迷失在这里,但是来自MVC.NET世界我不能为我的生活弄清楚这一点。我没有收到任何错误消息,但是在表单提交中提交的所有对象属性均为null。对象本身不是空的,只是它们的属性。Spring 3复选框列表对象具有空属性

我想要做的是在窗体提交后,有一系列对象,由表单上的复选框表示。由于嵌套列表的排列,你可以看到它有点棘手。该视图在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> 

回答

0

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

要么在您的SearchModel中包含此项,要么在POST方法中包含另一个@ModelAttribute(“句点”)。

我建议坚持一种模式,再加上我不确定在控制器方法中是否可以拥有多个@ModelAttribute,尽管如此。

相关问题