[Seasar-user:17234] Re: [SAStruts]Listの保持方法

Takafumi Yoshida [E-MAIL ADDRESS DELETED]
2009年 4月 9日 (木) 10:10:49 JST


いつもお世話になります。吉田@オプティクスです。

2009/04/08 20:28 Kenji Yamaguchi <[E-MAIL ADDRESS DELETED]>:
> SAStrutsで、従業員マスタのようなものを作ろうとしています。
> 従業員マスタ画面の中には自分の部署を選択するような部署の
> プルダウンがあるようなものを想定しています。
>
> このような画面を作成する場合、部署の一覧はどのタイミングで
> 取得して、どのように保持しておけばよいのでしょうか?
> TeedaだとxxxItemsをBase64エンコードして保持するような
> itemsSaveみたいなものがありましたが、そのような考え方はあるのでしょうか?
> SAStrutsではSession保持でしょうか?
>
> Scaffoldで作成された画面をベースにEmployeeDtoを作って
> その中に下記のプロパティを持ってSerializableしました。
> public List<Dept> deptItems;
>
> このDtoを使って画面を作成した場合、1度目は正常に動くが、
> バリデータで再描画された場合に下記エラーがでてしまいました。
> HTTPステータス 500 - パス /employee に対するアクションのインスタンスがありません

validate失敗時にinputで指定された画面に遷移した際に
> public List<Dept> deptItems;
の中身がnullのためにエラーになっていませんか?

validate時の戻り先を@executeアノテーションで指定していると思いますが
自分の場合は、戻り先をhtmlではなくメソッドを指定し、Action経由でhtmlで戻るように
しています。具体的には、Actionで

protected void initList() {
   //select用のリストに値を準備..
}

@Execute(validator = false)
public void init() {
    initList();
    return "input.html";
}

@Execute(input = "init")
public String submit() {
    //validate成功後の処理
}

といった感じです。submitメソッドのinput先をメソッド名にするのがミソです:-)

> HotDeployではなくCooldeployにすると思っていたように動きました。
> ここまでで何か間違えているのでしょうか・
> 動きが違うのは何故なのでしょうか?

ここはちょっとよくわかりませんが、Serializableと関連してるかも。

> Scaffoldで作成された画面をベースにEmployeeDtoを作って
> その中に下記のプロパティを持ってSerializableしました。
> public List<Dept> deptItems;

とありますが、DeptはSerializableする必要はないように思います。


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