5

ファイルaPage.xhtmlには、次の行があります。

<ui:include rendered="#{not empty param.target}" src="#{param.target}.html" />
<ui:include rendered="#{empty param.target}" src="About.html" />

上記の行で、 に移動するとhttp://localhost:8080/beta/aPage.xhtml、 が であるため、ページAbout.htmlが含まれるparam.targetことを期待していましたnull。ただし、GlassFish は次の例外をスローしました。

java.io.FileNotFoundException: http://localhost:8080/beta/.html

どういうわけか、param.targetとは見なされませんでしたnull

さらに、次のように==and演算子を使用しようとしました。!=

<ui:include rendered="#{param.target != null}" src="#{param.target}.html" />
<ui:include rendered="#{param.target == null}" src="About.html" />

興味深いことに、今回、GlassFish のコンソールでは例外がスローされませんでした。ただし、ブラウザーでは、依然としてエラー ページが表示され、例外が表示されますjava.io.FileNotFoundException

どうしてこうなったのか、どうすれば回避できるのか教えていただけるとありがたいです。

アップデート:

Joop Eggen からのヒントのおかげで、最終的に次の行で問題を解決しました。

<ui:param name="noTarget"  value="About.html" />
<ui:param name="hasTarget" value="#{param.target}.html" />
<ui:include src="#{empty param.target? noTarget : hasTarget}" />

よろしくお願いします

4

2 に答える 2

4

srcは両方の場合で評価されますが、おそらくファイル存在テストで評価されますか?行う

<ui:include src="#{empty param.target? 'About' : param.target}.html" />
于 2012-05-30T07:55:38.017 に答える
3

ui:include属性がありませんrendered...でラップします<h:panelGroup

このような

<h:panelGroup rendered="#{not empty param.target}">
   <ui:include  src="#{param.target}.html" />
</h:panelGroup>
<h:panelGroup rendered="#{empty param.target}" >
    <ui:include src="About.html" />
</h:panelGroup>

編集

残念ながら、これは src の EL が有効なパスを指している場合にのみ機能します。

原因

の src の EL は、<ui:include>ビューのレンダリング時ではなく、ビューのビルド時に評価されます

于 2012-05-30T07:45:51.177 に答える