我要做的是对表格的第一行,第二行等做一些事情。
<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:什么时候没有显示任何内容。我是否错误地对行号进行了测试?
答案 0 :(得分:4)
这是糟糕的设计,不会那样工作。你正在以错误的方式混淆JSTL和JSF标签。
JSTL标记c:choose
和c: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>
这样,当您不在第一行或第二行时,您仍然拥有该列。