Несколько строк на запись в JSF? - PullRequest
1 голос
/ 10 декабря 2008

с данными myfaces, возможно ли иметь 2 строк для каждой записи? моя простая однорядная таблица выглядит следующим образом:

<h:dataTable id="somelist" value="#{MyBean.somelist}" var="item">
    <h:column>
        <f:facet name="header">
            <h:outputText value="ID"/>
        </f:facet>
        <h:outputText value="#{item.id}"/>
    </h:column>
</h:dataTable>

1 Ответ

1 голос
/ 10 декабря 2008

Да, в этом случае. Вы можете управлять значением, связанным с outputText через пользовательский DataModel .

public class TwoRowModel extends DataModel {

    private List<Pair> values = initData();
    private int index = -1;

    private List<Pair> initData() {
        List<Pair> list = new ArrayList<Pair>();
        for (int i = 0; i < 5; i++) {
            Pair pair = new Pair();
            pair.key = "Key " + i;
            pair.value = "Value " + i;
            list.add(pair);
        }
        return list;
    }

    @Override
    public int getRowCount() {
        return values.size() * 2;
    }

    @Override
    public Object getRowData() {
        Pair pair = values.get(index / 2);
        if (index % 2 == 0) {
            return pair.key;
        } else {
            return pair.value;
        }
    }

    @Override
    public int getRowIndex() {
        return index;
    }

    @Override
    public Object getWrappedData() {
        throw new UnsupportedOperationException("Demo code");
    }

    @Override
    public boolean isRowAvailable() {
        int realIndex = index / 2;
        if (realIndex < 0) {
            return false;
        }
        if (realIndex >= values.size()) {
            return false;
        }
        return true;
    }

    @Override
    public void setRowIndex(int idx) {
        this.index = idx;
    }

    @Override
    public void setWrappedData(Object value) {
        throw new UnsupportedOperationException("Demo code");
    }

    class Pair {
        public String key;
        public String value;
    }

}

В этом демонстрационном коде возвращается только то значение, которое будет отображено:

    <h:dataTable id="somelist" value="#{twoRowModel}" var="item">
        <h:column>
            <f:facet name="header">
                <h:outputText value="ID" />
            </f:facet>
            <h:outputText value="#{item}" />
        </h:column>
    </h:dataTable>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...