【问题标题】:Alternative c:if in JSF替代 c:if 在 JSF 中
【发布时间】:2018-07-27 11:33:13
【问题描述】:

是否有人知道<c:if> 的替代方案以缩短视图渲染时间,或者即使有可能。对于我到目前为止搜索的内容,它不存在,或者替代方法是使用 rendered 属性,但对我来说并没有真正起作用。

<af:listView value="#{bindings.date.collectionModel}" var="item" id="lv1">
    <af:listItem id="li2">
        <af:iterator id="i1" value="#{bindings.list.collectionModel}" var="row">
            <c:if test="#{item.bindings.attrid.inputValue eq row.attrid}">
                <ui:param name="varUI" value="true" />
                <c:set var="varC" value="true" />
            </c:if>
        </af:iterator>
        <af:outputText value="#{varUI}" id="otqaswq"/>
        <!--<af:outputText value="#{varC}" id="otqawq"/>-->
        <af:selectBooleanCheckbox text="Activated" id="sbc2" value="#{varUI}"/>
    </af:listItem>
</af:listView>

所以在上面的代码中我知道c: 它们在不同的时间运行,查看构建时间而不是渲染时间。 我需要的是 af:selectBooleanCheckbox 会根据是否存在具有相同值的值显示为真或假。 我的问题是,有人知道这样做的另一种方法吗?

【问题讨论】:

  • 所以你希望 if 在浏览器渲染后执行和更改?我认为这是你需要用 javascript 做的事情。
  • xyproblem.info - 你真的想在这里解决什么问题?

标签: jsf jstl oracle-adf


【解决方案1】:

渲染应该 100% 工作,你的表达可能不正确。 切换到另一个使用完全相同的表达方式的替代方案将把你带到同一个地方。

【讨论】:

  • 这也不起作用,因为&lt;ui:param&gt;&lt;c:set&gt; 在任何rendered 属性之前 被评估。
【解决方案2】:

您不能使用&lt;af:iterator&gt; 有条件地设置使用&lt;ui:param&gt;&lt;c:set&gt; 的值,因为它们都是在之前 &lt;af:iterator&gt; 评估的标记处理程序。您可以改用&lt;c:forEach&gt;,但这需要一些集合来迭代。像#{bindings.list.collectionModel} 这样的javax.faces.model.DataModel 很可能不起作用。

但老实说,您应该实现一些 Java 方法,该方法将为您提供所需的值(truefalse),而不是尝试根据 JSF 标记来实现此逻辑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 2014-11-15
    • 2010-12-21
    相关资源
    最近更新 更多