条纹复选框和文本字段

时间:2012-02-07 12:33:02

标签: stripes

全部 -

我正在使用条纹为我正在处理的问题做一些表单输入,而我仍然坚持如何最好地使用条带和复选框提交一对数据..例如,我的页面如下所示:

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

<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>可以填充,但事实并非如此。

如何使用复选框字段最好地提交一对项目。

提前致谢。

..克里斯

2 个答案:

答案 0 :(得分:4)

阅读documentation on indexed properties。您需要通过命名items[0]items[1]等来告诉Stripes您有多个项目:

<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>

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

答案 1 :(得分:2)

我会将其包装在JSTL 'forEach' tag中,然后将这些项目放入List中。与JB Nizet所说的相似,你还需要action 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}