[Seasar-user:12253] [Teeda] ForEachにて表示したボタンでsubmitした場合について

木村 究道 [E-MAIL ADDRESS DELETED]
2007年 12月 21日 (金) 17:20:26 JST


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

もしかしたら特殊な例かもしれませんが、ある条件下で
ForEachにて表示したボタンでsubmitした際、アノテー
ションおよびメソッドが実行されません。

一セットのhtml・Pageクラスで参照・新規登録・編集を
行っています。

画面には一覧と詳細を表示して、一覧に用意したボタン
をクリックすることにより、詳細の表示内容を切替えて
います。

編集画面でも、同じように編集対象を一覧のボタンによ
り切替えられるようにしていますが、編集画面で切替え
る場合は、変更内容を更新して、切替えるようにしよう
としています。
この際に、必須チェックのアノテーションおよびメソッ
ドが実行されません。

照会画面では対象のメソッドが実行されています。

Eclipseのデバックで、TargetCommandUtilクラスの、
getCommandメソッドでボタンのid名が取れていないとこ
ろまで確認しましたが、ここで挫折してしまいました。

何か考えられる原因はありませんでしょうか?

よろしくお願い致します。


HTML
---------------------------------------------------------------------------
<html>
<head>
<title>テストページ</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript">
function setIndex(name) {
  var hidden = name.substring(0, name.lastIndexOf(':'));
  var f = document['javascriptForm'];
  f.clickIndex.value = Number(f[hidden + ':userIndex-hidden'].value);
  //alert(f.clickIndex.value);
}
</script>
</head>
<body>
<form name="test" id="javascriptForm">
<input type="hidden" id="crudType"/>
<input type="hidden" id="clickIndex"/>
<input type="hidden" id="userItemsSave"/>
<!--=================================================================================================================-->
<!-- body start -->
<span style="font-size: 5pt;"><br/></span>
一覧<br/>
<table border="1">
    <tr>
      <th>No.</th>
      <th>コード</th>
      <th>名前</th>
      <th>パスワード</th>
      <th>ボタン</th>
    </tr>
  <div id="userItems">
    <tr>
      <td><span id="userIndex-span"  /></td>
      <td><span id="items_code" /></td>
      <td><span id="items_name" /></td>
      <td><span id="items_pass" /></td>
      <td>
        <div id="isRead-items"><input id="doTestRead" type="button" value="select" onclick="setIndex(this.name);"/></div>
        <div id="isEdit-items"><input id="doTestEdit" type="button" value="select" onclick="setIndex(this.name);"/></div>
        <input type="hidden" id="userIndex-hidden"/>
      </td>
    </tr>
  </div>
</table>
<br/>
<div id="isRead-detail">
  詳細(照会)<br/>
  <table>
    <tr><td><span id="code" /></td></tr>
    <tr><td><span id="name" /></td></tr>
    <tr><td><span id="pass" /></td></tr>
    <tr><td> </td></tr>
    <tr><td><input id="doNew"  type="button" value="New" /></td></tr>
    <tr><td><input id="doEdit" type="button" value="Edit"/></td></tr>
  </table>
</div>
<div id="isNew-detail">
  詳細(新規)<br/>
  <table>
    <tr><td><input id="code" /></td></tr>
    <tr><td><input id="name" /></td></tr>
    <tr><td><input id="pass" /></td></tr>
    <tr><td> </td></tr>
    <tr><td><input id="doInsert" type="button" value="Insert"/></td></tr>
    <tr><td><input id="doCancel" type="button" value="Cancel"/></td></tr>
  </table>
</div>
<div id="isEdit-detail">
  詳細(編集)<br/>
  <table>
    <tr><td><span  id="code" />
            <input id="code-hidden" type="hidden" /></td></tr>
    <tr><td><input id="name" /></td></tr>
    <tr><td><input id="pass" />
            <input id="passHidden" type="hidden" /></td></tr>
    <tr><td> </td></tr>
    <tr><td><input id="doUpdate" type="button" value="Update"/></td></tr>
    <tr><td><input id="doCancel" type="button" value="Cancel"/></td></tr>
  </table>
</div>
<input id="nowIndex" type="hidden" />
<!-- body end -->
<span id="allMessages"></span><br/>
</form>
</body></html>
---------------------------------------------------------------------------

Pageクラス
---------------------------------------------------------------------------
public class TestPage {

    public static final int READ = 1; // 参照
    public static final int NEW  = 2; // 新規
    public static final int EDIT = 3; // 編集
    protected int crudType = 1;        // 画面状態

    // 一覧
    private String items_code;
    private String items_name;
    private String items_pass;

    private ArrayList<Map<String, String>> userItems;
    private Integer userIndex;

    // 詳細
    @Required(target="doInsert")
    private String code;
    @Required(target="doInsert, doUpdate")
    private String name;
    @Required(target="doInsert")
    private String pass;
    private String passHidden;

    private int nowIndex = 0;

    private int clickIndex = 0;

    public Class initialize() {
        this.userItems = new ArrayList<Map<String, String>>();
        Map<String, String> map1 = new TreeMap<String, String>();
        map1.put("items_code", "0001");
        map1.put("items_name", "テスト1");
        map1.put("items_pass", "pass01");
        this.userItems.add(map1);
        Map<String, String> map2 = new TreeMap<String, String>();
        map2.put("items_code", "0002");
        map2.put("items_name", "テスト2");
        map2.put("items_pass", "pass02");
        this.userItems.add(map2);
        Map<String, String> map3 = new TreeMap<String, String>();
        map3.put("items_code", "0003");
        map3.put("items_name", "テスト3");
        map3.put("items_pass", "pass03");
        this.userItems.add(map3);
        Map<String, String> map4 = new TreeMap<String, String>();
        map4.put("items_code", "0004");
        map4.put("items_name", "テスト4");
        map4.put("items_pass", "pass04");
        this.userItems.add(map4);
        return null;
    }

    public Class prerender() {
        if (this.crudType == NEW) {
            this.code = "";
            this.name = "";
            this.pass = "";
        } else {
            Map<String, String> mapWork = this.userItems.get(this.clickIndex);
            this.code = mapWork.get("items_code");
            this.name = mapWork.get("items_name");
            this.pass = mapWork.get("items_pass");
            this.passHidden = this.pass;
            this.nowIndex = this.clickIndex;
        }
        return null;
    }

    public String doTestRead(){
        return null;
    }

    public String doTestEdit(){
        Map<String, String> mapWork = new TreeMap<String, String>();
        mapWork.put("items_code", this.code);
        mapWork.put("items_name", this.name);
        if (this.pass == null || this.pass.equals("")) {
            this.pass = this.passHidden;
        }
        mapWork.put("items_pass", this.pass);
        this.userItems.set(this.nowIndex, mapWork);
        return null;
    }

    public String doNew() {
        this.crudType = NEW;
        return null;
    }

    public String doEdit() {
        this.crudType = EDIT;
        return null;
    }

    public String doInsert() {
        Map<String, String> mapWork = new TreeMap<String, String>();
        mapWork.put("items_code", this.code);
        mapWork.put("items_name", this.name);
        mapWork.put("items_pass", this.pass);
        this.userItems.add(mapWork);
        this.crudType = READ;
        return null;
    }

    public String doUpdate() {
        Map<String, String> mapWork = new TreeMap<String, String>();
        mapWork.put("items_code", this.code);
        mapWork.put("items_name", this.name);
        if (this.pass == null || this.pass.equals("")) {
            this.pass = this.passHidden;
        }
        mapWork.put("items_pass", this.pass);
        this.userItems.set(this.nowIndex, mapWork);
        this.crudType = READ;
        return null;
    }

    public String doCancel() {
        this.crudType = READ;
        return null;
    }


    public boolean isRead() {
        if (this.crudType == READ) {
            return true;
        }
        return false;
    }

    public boolean isNew() {
        if (this.crudType == NEW) {
            return true;
        }
        return false;
    }

    public boolean isEdit() {
        if (this.crudType == EDIT) {
            return true;
        }
        return false;
    }

  getter/setter 省略

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



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