有条件地渲染ui:define

djm*_*jmj 11 jsf facelets templating conditional-rendering

我如何有条件地渲染<ui:define>

模板中的数据取决于所需的数据<f:viewParam>.

但是如果提供了无效的视图参数,那么<ui:define>不应该渲染,因为应该使用模板的默认内容.

我尝试过使用<c:if>但不起作用.

Bal*_*usC 12

无法有条件地渲染/构建<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>
Run Code Online (Sandbox Code Playgroud)

或者,更清楚但更冗长

<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>
Run Code Online (Sandbox Code Playgroud)

也可以看看: