我如何有条件地渲染a <ui:define>
?
模板中的数据取决于所需的数据 <f:viewParam>
。
但是如果提供了无效的视图参数,那么 <ui:define>
不应该呈现,因为应该使用模板的默认内容。
我试过用 <c:if>
但它不起作用。
我如何有条件地渲染a <ui:define>
?
模板中的数据取决于所需的数据 <f:viewParam>
。
但是如果提供了无效的视图参数,那么 <ui:define>
不应该呈现,因为应该使用模板的默认内容。
我试过用 <c:if>
但它不起作用。
无法有条件地渲染/构建 <ui:define>
。你只能为它的内容做。外面的一切 <ui:define>
在模板中被忽略。
更好的是有条件地建立 <ui:insert>
代替。该 <ui:insert>
在视图构建时运行,因此无法通过设置的属性有条件地呈现它 <f:viewParam>
。你只能有条件地建立它( <ui:insert>
标记本身)使用条件视图构建时间标记,如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>
使用 <ui:fragment>
代替。
<ui:define name="description">
<ui:fragment rendered="false">
<meta name="description" content="do not render" />
</ui:fragment>
</ui:define>