- PR -

strutsチェックボックスの表示(2次元配列)

1
投稿者投稿内容
roushi
常連さん
会議室デビュー日: 2003/07/18
投稿数: 28
投稿日時: 2003-12-16 00:53
こんにちは。
strutを学んでおりどうしてもわからないことがでてきました。
1次元配列の初期化はできたのですが
2次元配列になるとチェックボックスの
初期化ができない現象が起きています。

formクラス(TestForm.java)
//1次元配列
private boolean[] test = new boolean[1];
//2次元配列
private boolean[][] test2 = new boolean[2][2];

//フォーム初期化メソッド
public void reset (ActionMapping mapping, HttpServletRequest request) {

//1次元配列の初期化
for (int i=0 ; i<1 ; i++){
test[i]=false;
}

 //2次元配列の初期化
for(int i=0 ; i<2 ; i++){
for(int j=0 ;j<2 ; j++){
test2[i][j]=false;
}
}
}

//1次元配列のゲッター
public boolean[] getTest() {
return test;
}

//1次元配列を格納
public void setTest(boolean[] bs) {
test = bs;
}

//1次元配列の要素を指定して格納
public void setTest(int index,boolean bs) {
test[index] = bs;
}

//2次元配列の取得
public boolean[][] getTest2() {
return test2;
}

//2次元配列の要素を指定して取得
public boolean getTest2(int index1,int index2) {
return test2[index1][index2];
}

//2次元配列を設定
public void setTest2(boolean[][] bs) {
test2 = bs;
}

//2次元配列の要素を指定して格納
public void setTest2(int index1,int index2,boolean bs) {
test2[index1][index2] = bs;
}


JSP画面表示前アクション
//formのオブジェクト作成
TestForm tf = new TestForm();
//1次元配列に初期値trueを設定
tf.setTest(0,true);
//2次元配列に初期値trueを設定
tf.setTest2(0,0,true);
//セッションへ登録
session.setAttribute("tf",tf);

JSP画面
<html:checkbox name="tf" property="test[0]"/>←チェックボックスにチェックされている
<html:checkbox name="tf" property='<%="test2[0][0]"%>'/>←チェックボックスが空白

なぜか1次元配列の方だけ初期化されており
2次元配列の方は空白となってしまいます。
ゲッターセッターがおかしいのでしょうか・・・。

struts-config.xmlの設定は
<action path="/test"
type="study.Test"
scope="session"
name="tf">
</action>
です。
name="tf"でありscopeがrequestなら画面が表示されないのは理解できるのですが
sessionにしているので表示されると考えています。
↑1次元配列は、ばっちり表示(チェック)されています。

何かわかる方がいらっしゃればご教授お願いします。
よろしくお願いします。
roushi
常連さん
会議室デビュー日: 2003/07/18
投稿数: 28
投稿日時: 2003-12-16 11:49
こんにちは
追記です

試しにJSP画面で
bean:writeタグを使い
配列の中身を参照してみました。
すると

1次元配列の中身[0]
<bean:write name="tf" property="test[0]" /><br>
→true
2次元配列の中身です[0][0]
<bean:write name="tf" property="test2[0][0]" /><br>
→[Z@142b40

2次元配列の中身です[0]
<bean:write name="tf" property="test2[0]" /><br>
→[Z@142b40

となっていました。
つまりstruts?が2次元配列を
1次元配列として扱っていそうです・・・。

何かお知りの方がいらっしゃればご教授お願いします。
よろしくお願いします。

でくのぼう
大ベテラン
会議室デビュー日: 2003/10/06
投稿数: 162
投稿日時: 2003-12-16 11:53
こんにちは。

まだ、ざっと見ただけで解決云々の話は出来ないのですが
長いコードを貼り付けるときはBBコードの [code] タグを使って
見やすい表示を心がけられる事をお勧めします。

正直私も(簡単な内容であっても)インデントが無いコードを
解析するのは抵抗が・・・。
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2003-12-16 13:02
org.apache.commons.beanutils.PropertyUtils を見ると、
確かに1次元配列までしか対応していないようです。

困ったらソースを見てみるべし。
roushi
常連さん
会議室デビュー日: 2003/07/18
投稿数: 28
投稿日時: 2003-12-16 13:26

返信ありがとうございます。
見やすいコード記述や
自分の中で分析するだけでなく
元のソースを見て解析することが
非常に大事だとわかりました。

ありがとうございました。
1

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