- PR -

JSF(MyFaces)のTilesでcommandButtonなどが正しく表示されない

1
投稿者投稿内容
AK
会議室デビュー日: 2006/02/23
投稿数: 3
投稿日時: 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 ]
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2006-02-27 19:07
Bergstenの本(JavaServer Faces完全ガイド)の12.1.2に書いてある現象ですね.
同じく12.2にtilesを使う例もありますが,全体は普通のJSPで,
インクルードするものの一つだけがJSFならうまくいくようです.
AK
会議室デビュー日: 2006/02/23
投稿数: 3
投稿日時: 2006-03-01 11:34
ありがとうございます。

色々試した結果、インクルードするJSPのタグをすべてFacesコンポーネントとして記述すると、正しいレイアウトで出力されるようです。
<table>を<h:panelGrid>で記述してみたところ、うまくいきました。
この方法だと、インクルードするJSPがいくつあっても正しく動作します。

ただ、TDに該当する部分のstyleClassが画面ごとに増えてしまうのが難点です。
heightや色などは全画面共通でよいのですが、widthは画面ごとに定義したい
ので、専用のstyleClassが増えてしまいます。

t_yamo
常連さん
会議室デビュー日: 2006/02/16
投稿数: 21
投稿日時: 2006-03-01 12:27
tilesはあまりいじったことないので外しているかもしれませんが、tilesとJSFとの問題というより、JSF1.1のJSFタグの出力タイミングの問題っぽく見えます。
普通のタグを<f:verbatim>で囲んであげてもダメなのでしょうか。
AK
会議室デビュー日: 2006/02/23
投稿数: 3
投稿日時: 2006-03-01 15:07
t_yamoさんのおっしゃるとおり、出力タイミングのようです。
オライリーのJSF本に書いてありました。

ただ、tilesを使わないで1JSPに全て記述すると、HTMLタグ(table)など
も上手く表示されるので、やはりJSF+tilesのようでもあります。

試してませんが、普通のタグを<f:verbatim>で囲めば恐らく
正常に動作すると思いますが、tableタグなどを全て<f:verbatim>
囲むとソース上、見た目が苦しくなりそうですねぇ。。。
t_yamo
常連さん
会議室デビュー日: 2006/02/16
投稿数: 21
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)