Teedaのはまりどころ
いろいろとはまりやすいところのTIPSです。
Itemsの要素をJavaScriptで触る
きれいに組めば触れますが、基本的には最大要素分をあらかじめ作っておいて表示、非表示を制御した方が楽だと思います。個数に上限が無いようなデータの場合には追加するボタンでリロードが一番かな?
私はこんな回避でした。
- 上限が少ない場合には上限分の個数を作る
- 上限がない場合には現在数+20個などを作り一時保存するとまた増えるようにする
バリテーションエラーでデータが消える
JSF的にエラー時はページクラスの値は更新されないようです。たぶん汚れたデータってポリシーですね。
可能であれば画面側のJavaScriptで細かい入力制限を行い、Teeda側のバリテーションではエラーが起こらないように組んでおくのがよいと思います。
プレゼンテーション資料の「Teeda再考 - 使い方から拡張方法まで -」(http://teeda.seasar.org/ja/presentations.html)に別のバリデーションを使う方法が書いてあるので、こっちを使った方が幸せになれるかも。。。
メモリ不足になる
COOL deployで動かすと多少改善します!(ちょっと違う)
基本的にメモリはたくさんたべる子なので、ヒープメモリ系の設定としましょう。
-Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m
開発機など搭載メモリの関係(搭載メモリの25%がMax)で大きな数字が設定できない場合には。。。メモリエラーがでたらVMを再起動します。。。あとEclipse上のTomcatはヒープが少ないので、256mぐらいには増やしましょう!
普通に使っているとあまりメモリ不足にはならないかもしれませんが、HOT deployで全部のページをSeleniumとかで自動的に巡回するようにすると、メモリを消費していくのがわかりやすいと思います。(COOLでも少し余裕をみて設定した方がいいと思います)
データ構造がわからない
Listでの繰り返しとかデータ構造がいまいちわかりにくいですよね。その場合にはTeeda HTML Example(http://teeda.seasar.org/ja/downloads.html)を参考に!
ただし総称型とかでばりばり警告でまくりなので注意しましょう。
public Class initialize() { return null; }
デフォルトで絶対にでるのがこのClassの警告ですが
public Class<*> initialize() { return null; }
<*>でなんでも大丈夫にします!
総称型の意味ないのですが仕方ないです。。。ページクラスに共通親クラスがあるのであればそのクラス名を指定した方がスマートかな?
public List<Map<String,String>> statusItems; private void makeList(){ statusItems = new ArrayList<Map<String,String>>(); Map<String,String> map; StatusList statusList[] = statusListDao.selectAll(); for( int i = 0 ; i < statusList.length ; i++ ){ map = new LinkedHashMap<String,String>(); map.put("value", statusList[i].value); map.put("label", statusList[i].title); statusItems.add(map); } }
List型などはちょっと面倒ですが、上記のように記述します。
これってTeeda関係ないですが、何を指定していいのかわかりにくくなりますので、Java1.5で組んでいるのであれば初期からちゃんと記述していきましょう!
CheckStyleとか使っていても内部はJava1.4向けだったりして、この警告は無視する設定とかはなるべくやめましょう。
どこみて開発すればいいの?
最初は「Seasar2によるスーパーアジャイルなWeb開発」の書籍を参考にしましょう!
ここに書いてあることで基本は大丈夫だと思います。ただしDoltengのバージョンとかが少し古いので、公式サイト(http://teeda.seasar.org/ja/setup.html)みてセットアップした方がいいかもしれません。
一番便利なのは逆引きリファレンス(http://teeda.seasar.org/ja/extension/reverse/index.html)です。
ここに書いてないことは基本使わない方がいいと思います!
コアな資料はプレゼンテーション(http://teeda.seasar.org/ja/presentations.html)にあります。ここの資料はかなり重要なので目を通しましょう!
ただし、最初は読んでもわからないことがあるので、ある程度理解できたときに読み直すと理解しやすいと思います。
Gridって?
リファレンス(http://teeda.seasar.org/ja/extension_component_reference.html#grid)に記述がありますが、逆引きにはないので、個人的には非推奨の機能です。
便利ですが、細かい調整はできませんのでそのまま使うか、カスタマイズする場合にはJavaScriptなどで同じ動作をするものを作成するか、Teeda Extensionの元のソースを改造するぐらいの気合が必要になります。
個人的には素のまま使うと決めても、あとからやっぱり改造したいと言われるので、最初から選択肢からはずした方が吉!
セッションって?
@Component(instance = InstanceType.SESSION) public class SessionDto implements Serializable { }
こんな感じのクラスを作って中身が保存されます。使う場合にはページクラスで宣言してDIしてもらってください。
public class IndexPage { public SessionDto sessionDto; }
クラスの名前とかは何でも大丈夫だと思います。SerializableするのでserialVersionUIDは設定してあげてください。この辺はEclipseで警告でて、解決方法選ぶと作ってくれるはずです。
レイアウトが。。。
レイアウトも少しはまりやすい機能だと思います。
利用する場合には、事前に検証をして大丈夫だなって確認してから利用してみてください。