[Seasar-user:18013] [teeda] ダイナミックプロパティにて入力値より表示を制御するには

木村 究道 [E-MAIL ADDRESS DELETED]
2009年 7月 16日 (木) 11:58:35 JST


お世話になっております、木村と申します。

早速ですが、ダイナミックプロパティにて入力値を元に
表示内容を制御しようとしていますが、アノテーション
でエラーになった時、意図した制御ができません。

やりたいことは、入力項目がAとBとあって、Aを入力さ
れたら、Bを入力不可にしようとしています。
制御方法は以下のようにしています。

 Page側:ダイナミックプロパティにてAが入力されていたらBを disabled にする。
 HTML側:Aが入力され、フォーカスが移ったらJavaScriptにてBを disabled にする。

この状態で、Aに入力したらBが入力不可状態となりますが
アノテーションエラーで再表示されると、Aに入力した値
はそのままですが、Bが入力可能な状態に戻ってしまいます。

サンプルでは、bbbが入力されたらcccを入力不可にしよう
としています。
そして、aaaでアノテーションエラーを出すと再現します。


アノテーションエラー時も状態を保てる方法ないでしょう
か?よろしくお願い致します。


バージョン
 ・Seasar2 2.4.34
 ・Teeda 1.0.13-sp6

--サンプル------------------------

public class DynamicPropertyPage {

    @Required
    private String aaa;
    private String no;
    private String bbb;
    private String ccc;

    private DynamicPropertyDto[] testItems;

    public String initialize() {

        this.testItems = new DynamicPropertyDto[3];

        DynamicPropertyDto testDto1 = new DynamicPropertyDto();
        testDto1.setNo ("A1");
        testDto1.setBbb("");
        testDto1.setCcc("");
        this.testItems[0] = testDto1;

        DynamicPropertyDto testDto2 = new DynamicPropertyDto();
        testDto2.setNo ("A2");
        testDto2.setBbb("bbb");
        testDto2.setCcc("");
        this.testItems[1] = testDto2;

        DynamicPropertyDto testDto3 = new DynamicPropertyDto();
        testDto3.setNo ("A3");
        testDto3.setBbb("");
        testDto3.setCcc("ccc");
        this.testItems[2] = testDto3;

        return null;
    }


    public String doTest() {
        return null;
    }

    /* ダイナミックプロパティ */
    public boolean getCccDisabled() {
        if (this.bbb == null || this.bbb.equals("")) {
            return false;
        } else {
            return true;
        }
    }


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>DynamicProperty</title>
<script type="text/javascript">
function bbbCh(el) {
    var cccEl = el.form[el.name.substring(0, el.name.lastIndexOf(':')) + ":ccc"];
    if (el.value == "") {
        cccEl.disabled = false;
    } else {
        cccEl.value    = "";
        cccEl.disabled = true;
    }
}
</script>
<style>
.onTeedaError {
	background-color: #FFCCCC;
}
</style>
</head>
<body>
<form id="DynamicPropertyForm">
<input type="hidden" id="testItemsSave"/>
<span id="allMessages" /><br/>
AAA: <input type="text" id="aaa" /><br/>
<table border="1">
  <thead>
    <tr>
      <th>No </th>
      <th>BBB</th>
      <th>CCC</th>
    </tr>
  </thead>
  <tbody id="testItems">
    <tr>
      <td><span  id="no"                        /></td>
      <td><input id="bbb" onblur="bbbCh(this);" /></td>
      <td><input id="ccc" disabled=""           /></td>
    </tr>
  </tbody>
</table>
<br/>
<input type="submit" value="test" id="doTest"/>
</form>
</body>
</html>


-- 
-----------------------------------------------------
 十八ソフトウェア株式会社
 システム開発部 アプリケーション開発課  木村 究道
 〒850-0861 長崎市江戸町6-5江戸町センタービル6F
 TEL:095-824-0018  FAX:095-827-8754
 E-mail: [E-MAIL ADDRESS DELETED]
-----------------------------------------------------




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