[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 メーリングリストの案内