を条件付きでレンダリングするにはどうすればよい<ui:define>
ですか?
テンプレート内のデータは、必要な によって異なります<f:viewParam>
。
ただし、無効なビュー パラメータが指定<ui:define>
されている場合は、テンプレートのデフォルト コンテンツを使用する必要があるため、 はレンダリングされません。
使ってみ<c:if>
ましたがうまくいきません。
を条件付きでレンダリングするにはどうすればよい<ui:define>
ですか?
テンプレート内のデータは、必要な によって異なります<f:viewParam>
。
ただし、無効なビュー パラメータが指定<ui:define>
されている場合は、テンプレートのデフォルト コンテンツを使用する必要があるため、 はレンダリングされません。
使ってみ<c:if>
ましたがうまくいきません。
を条件付きでレンダリング/ビルドすることはできません<ui:define>
。あなたはその内容に対してのみ行うことができます。テンプレートでは、外部の<ui:define>
ものはすべて無視されます。
代わりに条件付きでビルドすることをお勧めし<ui:insert>
ます。ビューの<ui:insert>
ビルド時に実行されるため、を介して設定されたプロパティによって条件付きでレンダリングすることはできません<f:viewParam>
。<ui:insert>
JSTLなどの条件付きビュービルドタイムタグを使用してのみ条件付きでビルドできます。JSTL<c:if>
は、生のリクエストパラメータを直接チェックします(したがって、<f:viewParam>
プロパティはチェックしません)。
マスターテンプレートでは、リクエストパラメータが存在するだけで十分であると仮定すると、次のようになります(検証を実行する必要がある場合は、EL式内、またはマネージドBeanで実行する必要があります。プロパティは。を介して事前初期化され@ManagedProperty("#{param.foo}")
ます。
例:マスターテンプレート:
<c:if test="#{not empty param.foo}">
<ui:insert name="content" />
</c:if>
<c:if test="#{empty param.foo}">
<p>Default content</p>
</c:if>
または、より明確ですがより冗長です
<c:choose>
<c:when test="#{not empty param.foo}">
<ui:insert name="content" />
</c:when>
<c:otherwise>
<p>Default content</p>
</c:otherwise>
</c:choose>