是否可以使用jsf h:datatable来拥有多行

Abh*_*ote 3 java jsf

使用h:datatable,我们可以显示如下数据

  1. JEMS
  2. 汤姆
  3. chirs
  4. 掠夺

但我可以显示如下所示:

  1. 杰姆斯2.汤姆
  2. 克里斯4.哈里

阿卜布,西班牙人

McD*_*ell 5

您可以在模型中进行管理.

例如,将列表拆分成对:

public class PairedList<T> extends AbstractList<Pair<T>> {
  private final List<? extends T> data;
  private final T defaultVal;

  public PairedList(List<? extends T> data, T defaultVal) {
    this.data = data;
    this.defaultVal = defaultVal;
  }

  @Override public int size() {
    return (data.size() / 2) + (data.size() % 2);
  }

  @Override public Pair<T> get(int index) {
    int left = index * 2;
    int right = left + 1;
    return new Pair<T>(data.get(left), right >= data.size() ? defaultVal : data
        .get(right));
  }

  @Override public boolean addAll(Collection<? extends Pair<T>> c) {
    throw new UnsupportedOperationException();
  }
}
Run Code Online (Sandbox Code Playgroud)

对类:

public class Pair<T> {

  private final T left;
  private final T right;

  public Pair(T left, T right) {
    this.left = left;
    this.right = right;
  }

  public T getRight() { return right; }
  public T getLeft() { return left; }
}
Run Code Online (Sandbox Code Playgroud)

公开列表的托管bean:

public class TwoPerRowBean implements Serializable {
  private final List<String> data = Arrays.asList("Jems", "tom", "chirs",
      "harry", "Barry");

  public List<Pair<String>> getPairedData() {
    return new PairedList<String>(data, "-");
  }
}
Run Code Online (Sandbox Code Playgroud)

表配置:

<h:dataTable value="#{twoPerRowBean.pairedData}" var="pair">
  <h:column> <h:outputText value="#{pair.left}" /> </h:column>
  <h:column> <h:outputText value="#{pair.right}" /> </h:column>
</h:dataTable>
Run Code Online (Sandbox Code Playgroud)