<c:when>在PrimeFaces数据表中不起作用?</c:when>

时间:2014-09-09 13:28:22

标签: jsf primefaces jstl

我要做的是对表格的第一行,第二行等做一些事情。

<p:panel header="#{mat.description}">
    <p:dataTable var="datarow" value="#{myBean.getDatarows(mat.itemId)}" emptyMessage="No materials" rowIndexVar="row">
        <c:choose>
            <c:when test="${row eq 0}">
                <p:column headerText=""><h:outputText value="#{datarow.get(1)}" /></p:column>
            </c:when>
            <c:when test="${row eq 1}">
                <p:column headerText=""><h:outputText value="#{datarow.get(1)}" /></p:column>
            </c:when>
        </c:choose>
        <p:column headerText=""><h:outputText value="#{datarow.get(6)}" /></p:column>
        <p:column headerText="Month 1"><h:outputText value="#{datarow.get(1)}" /></p:column>
        <p:column headerText="Month 3"><h:outputText value="#{datarow.get(2)}" /></p:column>
        <p:column headerText="Month4"><h:outputText value="#{datarow.get(3)}" /></p:column>
        <p:column headerText="Month 5"><h:outputText value="#{datarow.get(4)}" /></p:column>
        <p:column headerText="Month6"><h:outputText value="#{datarow.get(5)}" /></p:column>
    </p:dataTable>
</p:panel>

但是c:选择和c:什么时候没有显示任何内容。我是否错误地对行号进行了测试?

2 个答案:

答案 0 :(得分:4)

这是糟糕的设计,不会那样工作。你正在以错误的方式混淆JSTL和JSF标签。

JSTL标记c:choosec:when在树构建期间进行评估,但在呈现UI树时进行p:dataTable标记。

如果要包含/排除数据表的完整列,只需使用rendered上的p:column - 属性。如果你想实现里面列中显示的内容的不同行为,你可以使用? - 运算符来决定渲染的内容:

<p:dataTable var="datarow" ... rowIndexVar="row">
    <p:column>
        <h:outputText value="#{row eq 0 ? datarow.get(1) : 'some other stuff'}"/>
    </p:column>
</p:dataTable>

要在列中呈现不同类型的元素,只需将它们放在列中,但使用不同的rendered - 属性:

<p:column>
        <h:outputText rendered="#{row != 4}"/>
        <p:inputText rendered="#{row eq 4}"/>
</p:column>

这将在第5行(rowIndexVar从0开始)渲染输入元素,在所有其他行中渲染输出元素。

答案 1 :(得分:0)

我相信你总是需要相同数量的列。

将您的代码更改为:

<c:when test="${row eq 0}">
    <p:column headerText=""><h:outputText value="#{datarow.get(1)}" /></p:column>
</c:when>
<c:when test="${row ne 0}">
    <p:column headerText=""><h:outputText value="#{datarow.get(1)}" /></p:column>
</c:when>

这样,当您不在第一行或第二行时,您仍然拥有该列。