- PR -

struts で radio

投稿者投稿内容
peta826
会議室デビュー日: 2005/04/04
投稿数: 6
投稿日時: 2005-04-04 23:18
はじめまして
struts1.1を使用してweb開発をしているのですが
jspでラジオボタンを以下のループで回した時

<logic:iterate name="List" id="loop">
<br>
<html:radio property="data" value="0" />ラジオボタン1<br>
<html:radio property="data" value="1" />ラジオボタン2<br>
<br>
</logic:iterate>

全てのラジオボタンがグループ化してしまいました。
これを1ループ毎にグループ化しようと以下のコードにしてみました。

<logic:iterate name="List" id="loop" indexId="id">
<br>
<html:radio property="<%= "data[" + id + "]" %>" value="0" />ラジオボタン1<br>
<html:radio property="<%= "data[" + id + "]" %>" value="1" />ラジオボタン2<br>
<br>
</logic:iterate>

そしたら、今度はbeanでうまく値を受け取れなくなってしまいました。
どうすれば実装できるかわからず困っています。
どうかご教授ください。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-04-05 01:18
配列でめですか?
data[]
peta826
会議室デビュー日: 2005/04/04
投稿数: 6
投稿日時: 2005-04-05 13:46
getter/setter を以下のように書いてあるのですが
うまく動きません

private String[] data;
public String[] getData(int idx) {
return data;
}
public void setData(int idx,String[] strings) {
data[idx] = strings;
}

getter/setterをどのように記述すればよいでしょうか?
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-04-05 15:07
配列しか受け渡せないと思います。
indexはまったく受け取らないようにしたら動くと思います。
private String[] data;
public String[] getData() {
return data;
}
public void setData(String[] strings) {
data[] = strings;
}

こんな感じ。
恐らく、JSP書き込みでindexがほしい場合は、
<logic:iterate id="変数名1" collection="ここに配列を渡してやる" indexId="変数名2">
<html:input value="<%=変数名1[変数名2]%>">
</logic:iterate>
こんなんで取れませんかね?

(注意:値が取れてるか取れていないかのプロトタイプを想定の為、
インプットテキストにしています。)

詳細は、strutsのカスタムタグの項のhtmlタグのところを参照してください。
peta826
会議室デビュー日: 2005/04/04
投稿数: 6
投稿日時: 2005-04-05 15:31
るぱんさん、レスありがとうございます

現状は以下のような感じで、ラジオボタンのname属性を "data[index]" という形にしたのでエラーが出ている状態です。
ラジオボタンのname属性を "data" としてしまうと、iterateで回しているので
全てのラジオボタンがグループ化されてしまいます。

indexed="true" も試してみましたが、挙動がおかしくなってしまい、使えませんでした。

JSP
--------------
<logic:iterate name="List" id="loop">
<br>
<html:radio property="data" value="0" />ラジオボタン1<br>
<html:radio property="data" value="1" />ラジオボタン2<br>
<br>
</logic:iterate>
-----------------------------------------------------------
getter/setter
--------------
private String[] data;
public String[] getData() {
return data;
}
public void setData(String[] strings) {
data = strings;
}
-----------------------------------------
error
-------
null' java.lang.NullPointerException at org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.java:515) at ...
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2005-04-05 16:20
引用:

peta826さんの書き込み (2005-04-05 15:31) より:
るぱんさん、レスありがとうございます

現状は以下のような感じで、ラジオボタンのname属性を "data[index]" という形にしたのでエラーが出ている状態です。
ラジオボタンのname属性を "data" としてしまうと、iterateで回しているので
全てのラジオボタンがグループ化されてしまいます。

indexed="true" も試してみましたが、挙動がおかしくなってしまい、使えませんでした。

JSP
--------------
<logic:iterate name="List" id="loop">
<br>
<html:radio property="data" value="0" />ラジオボタン1<br>
<html:radio property="data" value="1" />ラジオボタン2<br>
<br>
</logic:iterate>
-----------------------------------------------------------
getter/setter
--------------
private String[] data;
public String[] getData() {
return data;
}
public void setData(String[] strings) {
data = strings;
}
-----------------------------------------
error
-------
null' java.lang.NullPointerException at org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.java:515) at ...


エラーのまんまです。
null' java.lang.NullPointerException at org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.java:515) at ...

<logic:iterate name="List" id="loop" indexId="index">
<br>
<html:radio property="data[<%=index%>]" value="0" />ラジオボタン1<br>
<html:radio property="data[<%=index%>]" value="1" />ラジオボタン2<br>
<br>
</logic:iterate>
こんな感じでもだめですか・・・?
peta826
会議室デビュー日: 2005/04/04
投稿数: 6
投稿日時: 2005-04-05 16:53
ダメでした。

JSPの方は、きちんと
<input type="radio" name="data[0]" value="0">ラジオボタン1<br>
<input type="radio" name="data[0]" value="0">ラジオボタン1<br>
<br>
<input type="radio" name="data[1]" value="0">ラジオボタン1<br>
<input type="radio" name="data[1]" value="0">ラジオボタン1<br>
<br>
...
といった具合に表示されるのですが

このindex付きnameの getter/setter がどうしてもうまくいきません・・・
ぬべたそ
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 72
投稿日時: 2005-04-05 17:50
こんにちは。
getterにインデックス付きのものを用意するとどうなりますか?
コード:
public String getData(int index){
  return data[index];
}


のような感じです。

スキルアップ/キャリアアップ(JOB@IT)