使用JSF Datatable有条件地显示行

Eli*_*lie 14 datatable jsf

我有一些当前可用的JSF代码(如下所示),我需要修改它以有条件地禁止显示表的某些行.我知道如何有条件地抑制特定单元格的显示,但这似乎创建了一个空单元格,而我正在尝试做的是根本不显示该行.

有什么建议?

<h:dataTable styleClass="resultsTable" id="t1" value="#{r.common}" var="com" headerClass="headerBackgrnd" rowClasses="rowOdd, rowEven" columnClasses="leftAlign, rightAlign, leftAlign">
    <h:column>
        <h:outputText rendered="#{com.rendered}" styleClass="inputText" value="#{com.description}: " />
    </h:column>
    <h:column>
        <h:outputText styleClass="outputText" value="#{com.v1}" />
    </h:column>
    <h:column>
        <h:inputText styleClass="inputText" value="#{com.v2}" />
   </h:column>
</h:dataTable>
Run Code Online (Sandbox Code Playgroud)

基本上,所说的#{com.rendered}行将有条件地显示单个单元格的内容,当com.rendered为false 时生成空单元格.但是我想在某些条件下跳过显示器的整行 - 我该怎么做呢?

Nag*_*alf 13

行对应于表集合中的数据对象.如果您不想要该行,请不要将该对象放入集合中.

或者,您可以使用rowClassesdataTable 的参数.

Bean代码:

public String getRowClasses() {
    StringBuilder sb = new StringBuilder();
    for (Data data : myData) {
        sb.append(data.hide ? 'hide,' : 'show,');
    }
    return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)

CSS:

tr.hide {display:none;}
Run Code Online (Sandbox Code Playgroud)

  • 然后是两个集合,一个包含所有数据,第二个包含用于显示的内容? (5认同)
  • 它仍然只是2个集合,您只需根据需要更改显示集合的内容.但是如果你不介意在上面编辑的M.中加一点V,那么有一种方法可以用一个集合以编程方式进行. (2认同)

小智 5

对于使用richFaces的人,您可以使用rich:column的filterExpression属性.

<rich:column filterExpression="#{put your expression here}">
    ...
</rich>
Run Code Online (Sandbox Code Playgroud)

如果不满足条件,则过滤掉整行.

例子是使用seam EL!