ちょっと技術調査ってことで触った時のトラブル対応メモ.
一部未解決だけど…
JBossやコンテナに関するもの
#1. DSが見つからないエラーになる
persistence.xmlのDS名(jta-datasource-name/non-jta-datasource-name)に
"java:/"を付けるようにする
#2. WARとEJB JARが別な場合(EARにしない場合)はEJBアノテーションのmappedNameを指定しなければならない
[#AS7-321] Injection from outside modules - JBoss Issue Tracker
今回はInitialContextからlookupするようにした
→ ユーティリティを作成
#3. JSFへのEJB DIを使うにはweb.xmlのweb-appのversionが2.5以上でないとだめ
java - Resolution should not happen via injection container error - Stack Overflow
"Answer 1"を参照
#4. WARとEJB JARがわかれていると@LocalだとDI出来ない
JNDIで見つけられないといわれる
#5. WARとEJB JARがわかれていると当たり前だがその間でやり取りされるオブジェクトは直列化可能でないとだめ
EJBに関するもの
#1. CMTはJTAじゃないとダメ
JSFに関するもの
#1. f:loadBundle は デフォルトのリソースファイルがないとEclipseでリソースファイルがないエラーになる
#2. JSFのプロパティファイルのキー名はピリオドを使ってはダメ
JSFToolbox? - JSF Tag Reference
JSF2.0 タグ一覧 (f:loadBundle)|赤び~の備忘録
「回避方法」を参照
#3. FacesServletのdispatch無限ループ
configuration - Faces Servlet threw exception java.lang.StackOverflowError - Stack Overflow
web.xmlのuri-patternで無限ループの原因が回答されてる
tomcat - endless loop / StackOverflowError when using Apache MyFaces 2.0 - Stack Overflow
#4. includeにはf:subviewを使う
いくつかネットで見つけたんだけど…
- includeタグを囲む
- include先の.jspファイル内で囲む
- include先のファイルも完全なHTML
- 必要部分だけでよい
とどちらの例もあって説明不足でわからん…
いろいろやっていたらなぜか
<%@ include %>から<jsp:include>
にしたらうまくいった…
【原因が判明】
JSP XML形式(<jsp:root>タグ内)のため<jsp:directive.include>
directiveのときには取り込むサブJSPファイルには<f:view>
更にメインにある
例)
最上位に直接<?xml?>は書いても大丈夫だった
#5. セッションは"sessionScope.<key>.<property>"でアクセスできる
これはどちらもダメ.
- sessionScope['<key>.<property>']
- sessionScope['<key>'].<property>
これも同様にダメ.
- session.hoge
- session['hoge']もダメ
#6. h:commandLinkのactionにoutcome文字列を直接書くと"The action value does not match a navigation case outcome."と警告される
faces-config.xmlには書いてあるんだけど…
ほとんどダメだけど出ないのもあるし…
いつの間にか警告が出なくなった
何かしたような…はて?(忘れた…)
#7. f:selectItemsはvarで変数指定して,itemValueやitemLableで参照できる
こんな感じで楽々…
<f:selectItems value="#{aBean.elementList}" var="e" itemValue="#{e.value}" itemLabel="#{e.name}" />
って,ショック!JSF1.2ではできない…どうしよう…
JSF1.2ではbacking beanがSelectItmeを返すようにして,SelectItemに値とラベルを設定して生成する
例)
list.add(new SelectedItem(value, lable));
これを返すメソッドを用意する
#8. プロパティありのカスタムバリデータはStateHolderインタフェースも実装が必要
Serializableでも良いみたい
#9. Mojarraには拡張バリデータがある
正規表現,クレジットカード,...
#10. ファイルの文字コードは"pageEncoding",出力ファイルの文字コードは"charset"
例) JSPはUTF-8,出力はWindows-31Jの場合
<%@ page contentType="text/html;charset=Windows-31J" pageEncoding="UTF-8" %>
#11. WEB-INF以下にリダイレクトはできない
#12. グローバルな例外ハンドリングはActionListenerを拡張するかFacesサーブレットのラッパを作る
web.xmlの<error-page>に直接JSFは書けないらしいので,non JSFからリダイレクトにする必要がある
→ やったら白ページになった…
Strutsならstruts-config.xmlの<global-exception>で書けるのに…