- - PR -
JSF(MyFaces)のTilesでcommandButtonなどが正しく表示されない
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-02-23 22:46
お世話になります。
JSF(MyFaces)のTilesでJSPを分割してアプリを作っています。 構成は、 @mainLayout.jsp・・・全体の構成を決める Aheader.jsp・・・・・ヘッダー部 Bbody.jsp・・・・・・ボディ部 Cfooter.jsp・・・・・フッター部 です。 @で<tiles:insert…を使って、 各JSPを読み込んでいます。 ABCの部分で<h:commandButton や<h:inputText など入力系の タグを利用すると、tableタグ内など、定義した場所に表示されません。 JSPの一番最初に表示されてしまいます。ちなみに<h:outputText などは 正しく表示されます。 【例】 <table> <tr><td>入力</td></tr> <tr></td><h:commandButton… /></td></tr> </table> と定義しても表示されるHTMLは、 <input type="submit" … <table> <tr><td>入力</td></tr> <tr></td></td></tr> </table> となってしまいます。 どなたかご教授をよろしくお願いします。 [ メッセージ編集済み 編集者: 未記入 編集日時 2006-02-23 22:58 ] [ メッセージ編集済み 編集者: 未記入 編集日時 2006-02-24 09:06 ] [ メッセージ編集済み 編集者: AK 編集日時 2006-02-24 10:14 ] |
|
投稿日時: 2006-02-27 19:07
Bergstenの本(JavaServer Faces完全ガイド)の12.1.2に書いてある現象ですね.
同じく12.2にtilesを使う例もありますが,全体は普通のJSPで, インクルードするものの一つだけがJSFならうまくいくようです. |
|
投稿日時: 2006-03-01 11:34
ありがとうございます。
色々試した結果、インクルードするJSPのタグをすべてFacesコンポーネントとして記述すると、正しいレイアウトで出力されるようです。 <table>を<h:panelGrid>で記述してみたところ、うまくいきました。 この方法だと、インクルードするJSPがいくつあっても正しく動作します。 ただ、TDに該当する部分のstyleClassが画面ごとに増えてしまうのが難点です。 heightや色などは全画面共通でよいのですが、widthは画面ごとに定義したい ので、専用のstyleClassが増えてしまいます。 |
|
投稿日時: 2006-03-01 12:27
tilesはあまりいじったことないので外しているかもしれませんが、tilesとJSFとの問題というより、JSF1.1のJSFタグの出力タイミングの問題っぽく見えます。
普通のタグを<f:verbatim>で囲んであげてもダメなのでしょうか。 |
|
投稿日時: 2006-03-01 15:07
t_yamoさんのおっしゃるとおり、出力タイミングのようです。
オライリーのJSF本に書いてありました。 ただ、tilesを使わないで1JSPに全て記述すると、HTMLタグ(table)など も上手く表示されるので、やはりJSF+tilesのようでもあります。 試してませんが、普通のタグを<f:verbatim>で囲めば恐らく 正常に動作すると思いますが、tableタグなどを全て<f:verbatim> 囲むとソース上、見た目が苦しくなりそうですねぇ。。。 |
|
投稿日時: 2006-03-01 15:28
実装は確認していませんが、tilesで分割する際に<f:subview>を使っているのであれば、これが出力タイミングに効いているのかもしれませんね。
> tableタグなどを全て<f:verbatim> 囲むとソース上、 > 見た目が苦しくなりそうですねぇ。。。 「HTMLコンテンツを<f:verbatim>で囲む」と考えずに、「JSFタグに<f:verbatim>の終了タグと開始タグをセットで記す」と考えれば少し許容できるかも……っていうのは無理ですよねぇ。 </f:verbatim><h:commandButton… /><f:verbatim> JSF1.2だとその辺は改善されているようですが。 |
1