2012-02-07 64 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}