备选方案c:if在JSF中



是否有人知道视图渲染时间<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将显示为true或false,这取决于是否存在具有相同值的值。我的问题是,有人知道另一种方法吗?

如果渲染100%有效,则您的表达式可能不正确。切换到另一种选择,在那里你将使用完全相同的表达式,这将使你处于相同的位置。

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

但老实说,您应该实现一些Java方法,它将为您提供所需的值(truefalse(,而不是试图用JSF标记来实现这个逻辑。

最新更新