Click Framework Tips

しばらく離れていたけど、
一通り作った後、改めてフレームワークの動きとかを調べてみたので
そのTips。
まずは作って、後は動作をものにする。
これ必須。


Strutsつかってても何人がライフサイクル知ってるのか・・・と

何も考えずにActionクラスにインスタンス変数使うなよ。。。と。


まぁその点Clickは見えやすいのでいいのでは?って気もします。
フレームワーク自体がシンプルにまとまってるしね。


(リクエストごとにPageインスタンスだし)


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を上書きとかでもどうにもならん感じです。