2012-02-07 206 views
0

全部 -条纹复选框和文本框

我用条纹做的问题某种形式的输入我的工作和我卡在如何以最佳方式提交AA对使用条纹和复选框的数据。 。例如我的页面如下所示:

我有一个选项列表,其中用户可以通过单击该框启用选择,并通过在其旁边的文本字段中输入数据来为该项目提供一些输入:

<tr> 
<td><stripes:checkbox name="item.enable" value="${item.id}"/></td> 
<td><stripes:text name="item.value" value="${item.value}"/></td> 
</tr> 
..... 
next item... 

当表单提交时,我希望我的Collection<Item>将被填充,但情况并非如此..

我怎样才能最好提交使用复选框字段的一对项目。

在此先感谢。

..Chris

回答

3

阅读documentation on indexed properties。你需要告诉你有多个项目条纹,通过命名并items[0]items[1]等:

<tr> 
    <td><stripes:checkbox name="items[0].enable" value="${item.id}"/></td> 
    <td><stripes:text name="items[0].value" value="${item.value}"/></td> 
</tr> 
<tr> 
    <td><stripes:checkbox name="items[1].enable" value="${item.id}"/></td> 
    <td><stripes:text name="items[1].value" value="${item.value}"/></td> 
</tr> 

这个假设,你的行动Bean有一个setItems(List<Item> items)方法,该Item类有一个公共的无参数的构造函数,并有一个setEnable(String itemId)和一个setValue(String value)方法。

2

我会把它包装在JSTL 'forEach' tag中,我会把这些项目放在列表中。类似于JB Nizet所说的,您还需要动作bean中的公共setter。如果您使用Collection<Item>以及List<Item>以外的其他实现,则以下代码段将不起作用。

<c:forEach var='itemIndex' begin='0' end='2'> 
    <c:set scope='page' var='item' value='${items[itemIndex]}'> 
    <tr> 
     <td><stripes:checkbox name="items[${itemIndex}].enable" value="${item.id}"/></td> 
     <td><stripes:text name="items[${itemIndex}].value" value="${item.value}"/></td> 
    </tr> 
</c:forEach> 

还有一种情况是,如果您不希望列表默认为3项。我正在考虑的是列表已经填充的时候。如果是这种情况,我会将<c:forEach>的'end'属性更改为:${fn:length(actionBean.items) == 0 ? 3 : fn:length(actionBean.items)-1}