Várias linhas por registro em JSF?

votos
1

ter uma tabela de dados MyFaces, é possível ter 2 linhas para cada registro? minha mesa de uma linha simples parece com o seguinte:

<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>
Publicado 10/12/2008 em 12:02
fonte usuário
Em outras línguas...                            


1 respostas

votos
1

Sim, neste caso. Você pode controlar o valor vinculado ao outputText via um costume 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;
    }

}

Neste código de demonstração, o valor retornado é apenas o único a ser exibida:

    <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>
Respondeu 10/12/2008 em 15:57
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more