【JavaEE】【JBoss】JBoss5.1.x+EJB3+JSF1.2 トラブル対応メモ | さすらいびとの徒然漂流記

さすらいびとの徒然漂流記

ふらふら漂流するさすらいびとのように,色々な話題についてお気楽極楽,徒然なるままに…

ちょっと技術調査ってことで触った時のトラブル対応メモ.

一部未解決だけど…



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>はダメ
更にメインにある<jsp:directive.page>も<jsp:text>も書くとエラーになった

例)
<jsp:text><![CDATA[ <?xml version="1.0" encoding="windows-31j" ?> ]]></jsp:text>

最上位に直接<?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以下にリダイレクトはできない

jsf 2.0 - In JSF, how to get redirected from WebContent/index.xhtml to WebContent/WEB-INF/index.xhtml - Stack Overflow



#12. グローバルな例外ハンドリングはActionListenerを拡張するかFacesサーブレットのラッパを作る

web.xmlの<error-page>に直接JSFは書けないらしいので,non JSFからリダイレクトにする必要がある
→ やったら白ページになった…

Strutsならstruts-config.xmlの<global-exception>で書けるのに…