如何有条件地呈现<ui:define>
?
模板中的数据取决于所需的<f:viewParam>
。
但是如果提供了无效的视图参数,则不应呈现<ui:define>
,因为应该使用模板的默认内容。
我尝试使用<c:if>
,但它无效。
答案 0 :(得分:12)
无法有条件地渲染/构建<ui:define>
。你只能为它的内容做。模板中会忽略<ui:define>
以外的任何内容。
最好是有条件地构建<ui:insert>
。 <ui:insert>
在视图构建期间运行,因此无法通过<f:viewParam>
设置的属性有条件地呈现它。您只能使用条件视图构建时标记(例如JSTL <ui:insert>
)有条件地构建它(<c:if>
标记本身),而后者又直接检查原始请求参数(因此不是<f:viewParam>
属性)。
在主模板中,它看起来像这样,假设只有请求参数的唯一存在就足够了(如果你需要执行验证,你需要在EL表达式中或在托管中执行它其中财产通过@ManagedProperty("#{param.foo}")
预先初始化的bean。
,例如,在主模板中:
<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>
答案 1 :(得分:1)
改为使用<ui:fragment>
。
<ui:define name="description">
<ui:fragment rendered="false">
<meta name="description" content="do not render" />
</ui:fragment>
</ui:define>