- - PR -
JSFでのカスタムタグ作成
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-01-16 22:32
はじめまして、
現在、勉強の為にJSFを使用しているのですが、(まだまだ勉強不足です) <h:dataTable>内で、データをリスト表示させる箇所で、 条件分岐のタグを作成しようと思ったのですが、動作しませんでした。 具体的には、 <h:dataTable value="#{testBean.results}" var="list">とし --- <h:column> <h:outputText value="#{list.key}"> </h:column> <h:column> <h:outputText value="#{list.name}"> </h:column> としています。 データの表示は問題ないのですが、 ここで、 <test:jyoken value="#{list.name}" compare="<%= Hoge.kei1 %>"> <h:outputText value="#{list.name}"> </test:jyoken> 上記のように、jyokenタグのvalueとcomapreを比較し、同値ならば <h:outputText value="#{list.name}"> を出力する。(単純に、doStart()でSKIP_BODYさせるかを判断させたい) としたいのですが、dataTableで指定したvar属性から 値を取得できません。 outputTextのrendered属性を使用することも考えたのですが、 分岐パターンが多く、また、上記のように<%= %>が使用できなかったもので このようなタグを作成出来ないか。とチャレンジしていました。 ループしない箇所で似たような条件分岐のタグを作成したのですが それは問題なく値を取得し処理されました。 どなたかご存知の方がおりましたら、ご教授願えないでしょうか。 よろしくお願いします。 | ||||
|
投稿日時: 2006-01-17 12:08
どうしても、というのであればJSTLに<c:choose>や<c:if>タグがありますが、
JSPで細かく条件分岐する作りはあまりよくないと思いますよ。 他にも、JSFと組み合わせた場合は問題も起こりやすいですし。 バッキングビーン(var="list"の実体)側に出力したいデータを返す プロパティを追加してみたり、変換して出力するプロパティを持った JavaBeansで包んで扱ってみたらどうでしょうか。
| ||||
|
投稿日時: 2006-01-18 02:07
ご指摘ありがとうございます。
まだまだJSFの各フェーズの動作を理解出来ていないため、 タグの作成は諦めました。 結果としましては、<h:outputText>等のrenderer属性を使用し ManagedBeanにbooleanを返すメソッドを加え、 そのメソッド内でdataTableにバインドしたUIDataの現在行を取得し 値を取得、判断の処理。という形式を取りました。 表示パターンが多いため、力技ですが実現できました。 ありがとうございます。 | ||||
|
投稿日時: 2006-01-18 13:57
JSFの難しいところの一つなのですが,childコンポーネントのレンダリングを
親が実行する(encodeChildren)ものと,JSPに任せっぱなしのものがあります. 前者はrendersChildrenプロパティがtrueのものですが,どれがそうなのかは仕様書にも javadocにも書いてありません >_<) 前者はh:commandLink,h:panalGrid, h:panelGroup, h:outputLink, h:dataTableなどです. f:viewやh:formは後者です. 特にh:dataTableは繰返し処理をencodeChildrenの中で実施します. 具体的には,var属性で指定された繰返し変数にデータを一つずつバインドしてから, childコンポーネント達のencodeBeginなどを呼び出します. したがって,JSFのコンポーネントで表現されていないものは繰り返せません. また「<%= Hoge.kei1 %>」はJSP実行でコンポーネントが作成されるときに評価されるので, ループ処理時にバインドされるvar変数は参照できないのだと思います. |
1