gpt4 book ai didi

jsf - 有条件地渲染 ui :define

转载 作者:行者123 更新时间:2023-12-04 02:02:52 25 4
gpt4 key购买 nike

如何有条件地呈现 <ui:define> ?

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

但是如果提供了无效的 View 参数,则 <ui:define>不应呈现,因为应使用模板的默认内容。

我尝试使用 <c:if>但它不起作用。

最佳答案

不可能有条件地渲染/构建 <ui:define> .你只能为它的内容做。外面的任何事情<ui:define>在模板中被忽略。

更好的是有条件地构建 <ui:insert>相反。 <ui:insert>在 View 构建期间运行,因此不可能通过 <f:viewParam> 设置的属性有条件地呈现它.您只能使用条件 View 构建时间标记(例如 JSTL <ui:insert> 标记本身)有条件地构建它(<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>

另见:
  • JSTL in JSF2 Facelets... makes sense?
  • 关于jsf - 有条件地渲染 ui :define,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13676243/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com