Click Framework Tips
しばらく離れていたけど、
一通り作った後、改めてフレームワークの動きとかを調べてみたので
そのTips。
まずは作って、後は動作をものにする。
これ必須。
Strutsつかってても何人がライフサイクル知ってるのか・・・と
何も考えずにActionクラスにインスタンス変数使うなよ。。。と。
まぁその点Clickは見えやすいのでいいのでは?って気もします。
フレームワーク自体がシンプルにまとまってるしね。
request単位で値を渡すので、ページングの際にフォームの値が消えてしまう。
sessionを使うべし。
ただし、コンストラクタ内ではcontextはnullなので気をつけてください。
⇒onInit以降で使用すること。
sessionだと他画面遷移時のクリアなどが必要でめんどい・・・
一度読み取ると消えるセッションパラメータです。
getContext().setFlashAttribute("hoge", "hogggeeeeeee");
getSessionAttributeで取り出す事。
ただし、一度しか読み取れないので、よく考えて使用しないと、
ヌルポです。
mail、urlのautoLinkでは物足りない・・・
テーブルに渡すObjectに、
編集文字を返すようなgetメソッドを追加してそこで文字列を編集して返す。
というのは面倒くさいので決まって行ないたいクラスをColumnを継承して作成する
というのは面倒くさいので、
デコレータを実装する。
http://click.sourceforge.net/docs/click-api/net/sf/click/control/Column.html
APIに見事なまでにサンプル載ってますので・・・
sessionへの情報退避は何処で・・・
適宜
というか、onDestroyで退避させようとすると、
レスポンスをコミットした後で・・・
見たいな感じで、ServletのonGetなどでforwardした後にreturnを入れなかった場合みたいな
エラーが出たり出なかったり。
いや・・・僕環境ではでるんですが、
onDestroy推奨の人もいるようですので不明
画面間で引き継いだ値って何処で設定すればいいの・・・
コンストラクタでform作ってるので、
そこで・・・
- >ヌルポです
初期処理で(onInitで)・・・
- >
onProcessで上書きされます。
結論としてはonGet/onPostなどになるのかな??
場合によってはonRender
formを退避して、form復元したい・・・
なんかformをsession退避させ、改めてformに代入(判りづらい?)
新しいリクエストで作成されたPageのformを古いformで書き換えたい場合に
代入してもどうにもならないんだけど・・・・
- >これ不明
じゃぁどうする?
formの中のControlの値をいちいち書き換えます。
oldForm.copyTo(form);
だと変なcopyが行なわれるのでお勧めできません。
必要なものだけを明示的に・・・
(もしくはoldForm->VO->form・・・
ってこれはダサいか?)
もう少しこの辺は検討
とりあえず私はFormを対比、
その後必要情報だけ移し変えとしてます。
なんだったらcontrols毎とかPage毎保持でもいいのかもね・・・
(ほんとに?)
とりあえず、controlsを上書きとかでもどうにもならん感じです。