[Seasar-user:3676] Re: selectManyCheckBox について

Shinpei Ohtani [E-MAIL ADDRESS DELETED]
2006年 5月 23日 (火) 01:39:48 JST


shotです。
返事がおそくなりました

06/05/19 に Toba Tetsuya<[E-MAIL ADDRESS DELETED]> さんは書きました:
> S2JSF 1.1.0 betaを用いて、システム開発を行っています。
>
> ラジオボタンを使って、テーブルの行を選択をするレイアウトは、
> 下のように selectOneRadio を使って実現できました。
>
> <form>
> <span m:inject="s:selectOneRadio"
>       m:value="#{sample.selectedIndex}">
> <table>
> <tr>
> <th>ラジオ</th>
> <th>氏名</th>
> </tr>
> <span m:inject="s:forEach"
>       m:items="#{sample.nameList}"
>       m:var="e" m:varIndex="i">
> <tr>
> <td>
> <input type="radio" value="#{i}"></input>
> </td>
> <td>
> <span m:value="#{e.name}"></span>
> </td>
> </tr>
> </span>
> </table>
> </span>
> <input type="submit" m:action="index"></input>
> </form>
>
> ところが、複数選択するために selectManyCheckbox を使って
> チェックボックスに変えたところ、チェックボックスすら出て
> こない状態となりました。
> HTMLソースを見ると、inputタグ自体が消えていました。
>
> <form>
> <span m:inject="s:selectManyCheckbox"
>       m:value="#{sample.checkedIndex}">
> <table>
> <tr>
> <th>チェック</th>
> <th>氏名</th>
> </tr>
> <span m:inject="s:forEach"
>       m:items="#{sample.nameList}"
>       m:var="e" m:varIndex="i">
> <tr>
> <td>
> <input type="checkbox"
>        m:inject="s:selectItem"
>        value="#{i}"></input>
> </td>
> <td>
> <span m:value="#{e.name}"></span>
> </td>
> </tr>
> </span>
> </table>
> </span>
> <input type="submit" m:action="index"></input>
> </form>
>
> テーブルタグやforEachを取り除いてやると、正しく動くようです。
>
> <form>
> <span m:inject="s:selectManyCheckbox"
>       m:value="#{sample.checkedIndex}">
> <input type="checkbox"
>        m:inject="s:selectItem"
>        value="0"></input>
> <input type="checkbox"
>        m:inject="s:selectItem"
>        value="1"></input>
> </span>
> <input type="submit" m:action="index"></input>
> </form>
>
> selectManyCheckBox では、このような使い方はできないのでしょうか?

現状だと、selectManyCheckBoxを上記のような使い方は
できないです。実現可能にできるかどうかは検討してみますが
現時点では私の方では出来ませんでした(もし間違っていたらどなたかご指摘願います)。


代替案としては、下記のようにselectManyCheckboxを使わずに
通常のcheckboxを使うようにして、

    <span m:inject="s:forEach" m:items="#{forEachDtoList}"
    	m:var="e" m:varIndex="i">
    	<tr>
    	    <td><input type="checkbox" m:value="#{e.select}" /></td>
    	
    		<td><span m:value="#{e.key}">111</span></td>
    		<td><span m:value="#{e.name}">aaa</span></td>
    		<td><a href="forEachResult.html" m:action="forEachResult">to ResultPage
    				<span m:inject="f:param" m:name="index" m:value="#{i}"/>
    			</a>
    		</td>
    		<td>
    			<input type="button" m:action="forEachResult" value="to ResultPage"
    				onclick="location.href='forEachResult.html'">
    				<span m:inject="f:param" m:name="index" m:value="#{i}"/>
    			</input>
    		</td>
    	</tr>
    </span>


Dto側で、

public class ForEachDto implements Serializable {

    private static final long serialVersionUID = 1L;

    private String key;

    private String name;

    private boolean select;

    public boolean isSelect() {
        return select;
    }

    public void setSelect(boolean select) {
        this.select = select;
    }

    public ForEachDto() {
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

のようにすると良いと思います。



Seasar-user メーリングリストの案内