クエリ文字列の有無に基づいて、いくつかのコンポジション/テンプレートを動的にレンダリングしようとしています。例えば:
ローカルホスト:9080/myWonderfulApp/test.xhtml?foo=bar
これは機能し、A.xhtml が取り込まれます。
ローカルホスト:9080/myWonderfulApp/test.xhtml
これは機能しません。B.xhtml は取り込まれません。
クエリ文字列部分がないという問題があります。?foo=bar を渡すと A.xhtml をレンダリングできますが、クエリ文字列がない場合は B.xhtml をレンダリングできないようです。いくつかのバリエーションを試してみましたが、最初は #{param['foo'] != 'bar' が機能すると考えていましたが、foo クエリ パラメータがまったくないため、機能していないと思います。param == null かどうかを確認しようとしましたが、それもうまくいきませんでした。
NO クエリ文字列に基づいてレンダリングされた属性を設定することは可能ですか?
B.xhtml に別のクエリ文字列を設定することはできません。これは、2 つの異なるスキンを取得するレガシー アプリに取り組んでいるためです。そのため、リンクするすべての古いアプリを改造することはできません。新しいアプリはクエリ文字列を使用し、古いアプリはクエリ文字列なしでリンクする古いスキンを取得する必要があります。
<!--This works-->
<h:panelGrid rendered="#{param['foo'] == 'bar' ? true : false}">
<ui:composition template="A.xhtml">...</ui:composition>
</h:panelGrid>
<!--This doesn't work-->
<h:panelGrid rendered="#{param == null ? true : false}">
<ui:composition template="B.xhtml">...</ui:composition>
</h:panelGrid>
これもうまくいかないようです:
<h:panelGrid rendered="#{empty facesContext.externalContext.requestParameterMap.foo ? true : false}">