プロが教える店舗&オフィスのセキュリティ対策術

明細行のチェックボックスで、選択した状態で画面再表示時にチェックを外した場合、再度画面を表示すると外したはずのチェックが戻ってしまいます。
現象
1.下記「作成したJSP」のチェックボックスを選択し、サーバへ送る。
2.「ViewList」内のチェックボックス「testCheckBox」(boolean型)にtrueが設定される。
※ViewListはtestActionFormのList型で、javaでもIteratorで1件づつtestActionFormを取得し、「testCheckBox」を確認している
3.上記1と同じHTMLフォームにおいて、今度はチェックボックスの選択を外して、サーバへ送る。
4.チェックを外したにも関わらず、trueの状態になってしまう。
良い対処方法があれば、ご教授をお願いします

※他のホームページで、ActionFormに下記メソッドを記述すると、チェックボックスが正常に戻ると書いてあり、試しましたがダメでした。
画面ActionForm内に、testActionFormのListを作成し、その中にチェックボックスがある場合、適用されないのでしょうか?
public void reset(ActionMapping mapping, HttpServletRequest request){
testCheckBox=false;
}

☆作成したJSP
<%-- 明細行の反復表示 start --%>
<logic:iterate name="testActionForm" id="ViewList"property="ViewList" indexId="idx">
<!-- チェックボックス 開始-->
<td nowrap >
<html:checkbox property="testCheckBox" name="ViewList" indexed="true" index="idx" />
</td>
<!-- チェックボックス 終了-->
<!-- 入力テキスト 開始-->
<td nowrap >
<html:text property="testInput" size="50" maxlength="30" name="ViewList" indexed="true" index="idx" />
</td>
<!-- 入力テキスト 終了-->
<%-- 明細行の反復表示 end --%>
</logic:iterate>

A 回答 (4件)

>>resetメソッドを定義するのは、ActionFormのクラスです。


>ActionFormのクラスに下記resetメソッドを定義しています。
>public void reset(ActionMapping mapping, >HttpServletRequest request){
>testCheckBox=false;
>}

ActionFormがもっているViewListのtestActionFormについてです。
public void reset(ActionMapping mapping, HttpServletRequest request){
for(int i=0;i<viewList.size();i++){
((testActionForm)viewList.get(i)).setTestCheckBox(false);
}
}

この回答への補足

emi2006さん
教えていただいた方法で実行してみたら、うまくできました!!
ありがとうございます。

ただ・・・
新たに下記問題が発生して困っています
 (1)あるボタンを押下すると、チェックボックスを選択にしているのに、再表示すると未選択になる。
 (2)たまに 「java.lang.IndexOutOfBoundsException: Index: 1, Size: 1」というエラーが発生する。

押下するボタンに引数を持たせて、その引数により、教えていただいた方法を読み飛ばす等試してみましたが
ダメでした・・・(自分のやり方が悪いだけ?)

何度も申し訳ないですが、良い対処方法やアドバイスがあれば、ぜひお願いいたします。

補足日時:2006/08/03 20:40
    • good
    • 0
この回答へのお礼

emi2006さん 返事が送れて申し訳ありません
回答ありがとうございます。
確かに、これならうまくいく気がします。
明日試して、結果を報告いたします。

お礼日時:2006/08/02 23:36

わはは。


私もやりました・・・(笑)。

既に回答は出ていますが、ActionFormのresetメソッドで、きちっと初期化(と、いうかリフレッシュ)するということです。
ActionFormのresetメソッドは、無いとコンパイルエラーが確か出るので、メソッド自体は既に記述していると思うのですが(中身が空でも)。

>画面ActionForm内に、testActionFormのListを作成し、その中にチェックボックスがある場合、適用されないのでしょうか?

チェックボックスが複数(List Size分)あるってことですよね?

今、実は手元に動いている物があるので、大丈夫だと思うのですが・・・(よく見たら、質問者さんの状況に色々と条件が付加されている内容でわかりにくいので、ソースの掲載はあえてしません)。

No.3さんのやり方でやってみて、だめなら再質問ください。
    • good
    • 0
この回答へのお礼

suzume00さん、回答ありがとうございます

>チェックボックスが複数(List Size分)あるってことですよね?
その通りです。

>ソースの掲載はあえてしません
機会があれば、ぜひ教えてください。
色々な手法を見て、勉強したいので・・・

ご意見ありがとうございました

お礼日時:2006/08/02 23:48

ActionFormに定義してあるtestActionFormと、そのプロパティViewListの内部のクラスtestActionFormは同一クラスということですか?



resetメソッドを定義するのは、ActionFormのクラスです。
そこで、ViewList全てのBeanについてfalseを設定してみてはどうでしょうか。

この回答への補足

emi2006さん、たびたび回答ありがとうございます。

ご質問の件ですが、
>ActionFormに定義してあるtestActionFormと、そのプロパティViewListの内部のクラスtestActionFormは同一クラスということですか?
 同一クラスですが、プロパティViewList(List型)の中にあるtestActionFormの内容は、明細1行毎に値は異なります

>resetメソッドを定義するのは、ActionFormのクラスです。
ActionFormのクラスに下記resetメソッドを定義しています。
public void reset(ActionMapping mapping, HttpServletRequest request){
testCheckBox=false;
}

>そこで、ViewList全てのBeanについてfalseを設定してみてはどうでしょうか。
すいません。何か参考になるソースかホームページがあれば教えていただけないでしょうか?

よろしくお願いいたします

補足日時:2006/08/01 20:05
    • good
    • 0

testActionFormとListの関係が分からないので正確でないですが、



resetを定義するのは、Actionに定義してあるActionFormですよ。

この場合、
testActionFormのプロパティとして、testActionFormのリストを持ってると言うことですか?

この回答への補足

emi2006さん、回答ありがとうございます

ご質問ですが、
testActionFormには、「ViewList」(List型)のプロパティがありまして、その中にtestActionFormが複数行存在する形です。

testActionForm(Actionに定義してあるActionForm)
 └ViewList(List型)
   ├testActionForm(明細行 1行目)
   ├testActionForm(明細行 2行目)
   ├testActionForm(明細行 3行目)
   ├testActionForm(明細行 4行目)
   ├testActionForm(明細行 5行目)
           ~
   └testActionForm(明細行 N行目)

よろしくお願いします。

補足日時:2006/08/01 16:09
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています