2

似乎这应该是可能的但是......?

使用richfaces 和JSF,我正在使用rich:dataList 迭代一个列表......一切都很好,除了我想要有选择地“渲染”每次迭代的能力,这可能吗?

例如:

<rich:dataList value="#{list}" var="item">
   <h:outputText value="#{item.something}" />
</rich:dataList>

我希望能够有选择地呈现输出,例如,如果“项目”的某些属性为真或其他。

我已经尝试将outputTextinoutputPanel和类似的内容包装起来,但是如果未渲染输出面板<li>,则迭代的“”仍然会被渲染,因此您会得到一个项目符号点,旁边没有任何内容,而不是完全跳过该项目:(

有什么方法可以解决这个问题还是我是 SOL?我意识到通常我希望事先准备好要显示的项目列表,但由于许多原因,我不想在这里重复,这是不可能的。

4

2 回答 2

1

奇怪的行为。我试图用Tomahawk's t:dataList重现它,我看到的行为完全相同!您可以做的最好的事情是手动替换它a4j:repeat并呈现纯 HTML<li>元素。就像是:

<ul class="rich-datalist">
    <a4j:repeat value="#{list}" var="item">
        <h:panelGroup rendered="#{item.somecondition}">
            <li class="rich-list-item">
                <h:outputText value="#{item.something}" />
            </li>
        </h:panelGroup>
    </a4j:repeat>
</ul>

(我借用了与此处rich:dataList描述的相同的类名,以便保留皮肤)

但是,我个人会将其标记为错误或至少标记为不受欢迎的行为,并将其报告给相关组件库背后的男孩。我已经为 Tomahawk 做到了

于 2010-02-01T18:14:48.510 回答
0

简单的。将渲染属性添加到 h:outputText 标记。

<rich:dataList value="#{list}" var="item">
    <h:outputText value="#{item.something}" rendered="#{item.isDisplayed}"/>
</rich:dataList>
于 2015-05-19T15:16:05.797 回答