[Seasar-user:16516] [Teeda] SelectBooleanCheckBox を持つ dto の Items について

umezawa yuichiro [E-MAIL ADDRESS DELETED]
2008年 12月 16日 (火) 13:31:55 JST


梅沢と言います。

SelectBooleanCheckBox を持つ dto の Items
として保持する画面を二画面用意し、両画面を行き来した際の動作について、想定と異なる場合があります。
想定どおり動作させる方法をご存知の方がいらっしゃいましたら、ご教授頂きたく、ML にポスト致しました。

Teeda 1.0.11-SP2, およびTeeda 1.0.13-SP4 にて事象を確認しております。

以下に事象を記述致します。

1. 画面A にて SelectBooleanCheckBox を持つ dto の Items を表示(□ はチェック無しの
checkbox を表しています。)
【画面A】
□ title1
□ title2
□ title3
□ title4
□ title5

2. 画面A にて title3 にチェックを入れてから submit ボタンを押下し、画面B に遷移。画面B では画面A
にてチェックを入れられた dto の情報を表示する。
【画面A】
□ title1
□ title2
■ title3
□ title4
□ title5
↓
【画面B】
title3

3. 画面A へのHTML アンカーをクリックして画面A に遷移。画面A では title3 のチェック状態が保持されており、これは想定通りの動作です。
【画面B】
title3
↓
【画面A】
□ title1
□ title2
■ title3
□ title4
□ title5

4. 画面A にて title3 のチェックを外し、title4 にチェックを入れて、画面B に遷移。画面B では title4
のみが表示され、これも想定通りの動作です。
【画面A】
□ title1
□ title2
□ title3
■ title4
□ title5
↓
【画面B】
title4

5. HTML アンカーをクリックして画面A に戻る。手順3 同様、title4 のチェックが保持されており、これも想定通りの動作です。
【画面B】
title4
↓
【画面A】
□ title1
□ title2
□ title3
■ title4
□ title5

6. 画面A にて title4 のチェックを外し、title2 にチェックを入れて、画面B に遷移。画面B では title2,
title4 が表示され、この動作が想定と異なります。手順4 と同様、画面A にてチェックを入れた title2 のみが画面B
に表示されると想定しております。
【画面A】
□ title1
■ title2
□ title3
□ title4
□ title5
↓
【画面B】
title2
title4

以下に検証に使用したリソースを示します(package宣言、import文等は適宜省略しております)。

・DTO
public class TestDto implements Serializable {
    private static final long serialVersionUID = 1L;
    public boolean chk;
    public String title;
}

・画面A HTML
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<title>test1</title>
</head>
<body>
<form id="testForm">
<input type="hidden" id="testItemsSave"/>
<table>
  <thead>
    <tr>
      <th></th>
      <th>タイトル</th>
    </tr>
  </thead>
  <tbody id="testItems">
    <tr>
      <td><input type="checkbox" id="chk"/></td>
      <td><span id="title"></span></td>
    </tr>
  </tbody>
</table>
<input type="submit" id="doSubmit" value="doSubmit"/>
</form>
</body>
</html>

・画面A Page
public class Test1Page {

    public TestDto[] testItems;
    public TestDto test;
    public boolean chk;
    public String title;

    public String initialize() {

        if(testItems != null) {
            return null;
        }

        List<TestDto> list = new ArrayList<TestDto>();
        for(int i = 0; i < 5; i++) {
            TestDto dto = new TestDto();
            dto.chk = false;
            dto.title = "title" + Integer.toString(i + 1);
            list.add(dto);
        }
        testItems= list.toArray(new TestDto[list.size()]);

        return null;
    }

    public String doSubmit() {
        return "test2";
    }
}


・画面B HTML
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<title>test2</title>
</head>
<body>
<table>
  <thead>
    <tr>
      <th>タイトル</th>
    </tr>
  </thead>
  <tbody id="test2Items">
    <tr>
      <td><span id="title"></span></td>
    </tr>
  </tbody>
</table>
<a href="test1.html">back</a>
</body>
</html>


・画面B Page
public class Test2Page {

    public TestDto[] testItems;
    public TestDto[] test2Items;
    public TestDto test;
    public boolean chk;
    public String title;

    public String initialize() {

        List<TestDto> list = new ArrayList<TestDto>();
        for(TestDto dto : testItems) {
            if(dto.chk) {
                list.add(dto);
            }
        }
        test2Items = (TestDto[]) list.toArray(new TestDto[list.size()]);

        return null;
    }
}

以上です。長文、乱筆失礼致しました。


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