2012-02-07 4 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をお読みください。あなたはItemクラスは、パブリック、引数なしのコンストラクタを持っていないこと、これはあなたのアクションBeanがsetItems(List<Item> items)メソッドを持っていることを前提とし、それらを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> 

に名前を付けることで、あなたが複数のアイテムを持っているストライプを伝える必要がありますsetEnable(String itemId)およびsetValue(String value)の方法を有する。

2

これをJSTL 'forEach' tagにラップし、リストにアイテムを入れます。 JB Nizetによると同様に、アクションBeanにパブリックセッターも必要です。 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}

関連する問題