2009-12-19 65 views
10

我有一个命令对象FaxForm,它拥有一个faxStatusList属性内的FaxStatus对象列表。使用Spring的表单标签动态绑定列表

public class FaxForm { 
    private List<FaxStatus> faxStatusList; 
    public void setFaxStatusList(List<FaxStatus> faxStatusList) { 
    this.faxStatusList = faxStatusList; 
    } 
    public List<FaxStatus> getFaxStatusList() { 
    return faxStatusList; 
    } 
} 

我最初有一个JSP页面,将通过执行绑定的对象如下:

<c:forEach items="${esaFaxForm.faxStatusList}" var="item" varStatus="loop"> 
    <tr class="tableAltBackground"> 
    <td> 
     <form:checkbox path="faxStatusList[${loop.index}].selected"/> 
    </td> 
    <td> 
     <form:select path="faxStatusList[${loop.index}].status" items="${esaFaxForm.statusOptions}" onchange="checkThisBox(this);"/> 
    </td> 
    <td> 
     <a href="${statusContUrl}?id=${item.id}&status=${item.status}" onclick="openFaxWindow('${viewFaxUrl}?id=${item.id}', ${loop.index});">${item.name}</a> 
     <form:hidden path="faxStatusList[${loop.index}].name"/> 
    </td> 
    <td> 
     <a href="${statusContUrl}?id=${item.id}&status=${item.status}" onclick="openFaxWindow('${viewFaxUrl}?id=${item.id}', ${loop.index});">${item.id}</a> 
     <form:hidden path="faxStatusList[${loop.index}].id"/> 
    </td> 
    </tr> 
</c:forEach> 

不过,我想弄清楚我怎么可以没有foreach循环和索引的结合。 Spring网站上的示例通过将路径设置为列表名称来显示绑定。有没有办法来绑定属性?我试过,但它失败:

<form:checkbox path="faxStatusList.faxStatus.selected"/> 
<form:select path="faxStatusList.faxStatus.status" items="${esaFaxForm.statusOptions}"/> 

的faxStatusList有一个getter和setter方法和FaxStatus变量都有的getter/setter属性。我得到的错误“bean类的无效属性‘faxStatusList.faxStatus’......”

+0

faxStatusList是一个索引属性。所以你不能使用像faxStatusList.faxStatus这样的东西。改用faxStatusList []。faxStatus。 – 2009-12-19 22:41:30

+0

我真的很喜欢你当前的代码作为答案,因为它提供了很大的灵活性。 – Steve 2011-03-01 15:27:57

回答

9

Spring表单标签具有复选框标签。

<form:checkboxes items="${faxStatusList}" path="faxStatusList" itemLabel="name" itemValue="id" delimiter="<br/>" onclick="yourOnClickMethodIfYouNeed(this);"/> 

上面的代码会显示与BR标记分隔复选框项目的列表:可以按如下方式做自动绑定使用它。对复选框状态所做的任何更改都会反映在您的FaxForm中。 faxStatusList对象。