Usando rich:dataTable para mostrar dados de vectores

Olá a todos,

Sou novo no mundo das JSF e estou a tentar utilizar uma rich:dataTable para apresentar dados que tenho numa estrutura Vector<Vector<String>>, basicamente uma matriz de String, em que cada elemento [i][j] deve ser apresentado numa célula da dataTable, mas não sei como o fazer.

O meu backing bean que contém a estrutura é:

public class MatrixBean {
    private Vector<Vector<String>> main;
    
    public Vector<Vector<String>> getMain() {
        main = new Vector<Vector<String>>();
        
        Vector<String> aux1 = new Vector<String>();
        aux1.add("data1");
        aux1.add("data2");
        aux1.add("data3");
        
        Vector<String> aux2 = new Vector<String>();
        aux2.add("dataA");
        aux2.add("dataB");
        aux2.add("dataC");
        
        return main;
    }
}

A minha JSF é (estará provavelmente errada na associação aos valores visto que os dados não são apresentados, os headers funcionam bem):

<rich:dataTable id="taskList2" width="400" rendered="true" value="#{MatrixBean.main}" var="mainData">
            <f:facet name="header">   
              <rich:columnGroup>
                  <!-- table headers -->
                  ...
                  </rich:columns>
              </rich:columnGroup>
            </f:facet>
            
            <!-- table data/body -->
            <rich:columns value="#{TaskListBean.headerList}" var="singleCellData" index="ind">
                <h:outputText value="#{mainData[ind]}" />
            </rich:columns>
                
 </rich:dataTable>

Alguma ideia de como fazer?

Agradeço desde já,
~Ruben

Peço imensa desculpa, afinal o problema era com o bean e não com a JSF, esqueci-me de adicionar os vectores auxiliares à estrutura principal :slight_smile:

O código do bean é agora:

public class MatrixBean {
    private Vector<Vector<String>> main;
    
    public Vector<Vector<String>> getMain() {
        main = new Vector<Vector<String>>();
        
        Vector<String> aux1 = new Vector<String>();
        aux1.add("data01");
        aux1.add("data02");
        aux1.add("data03");
        
        Vector<String> aux2 = new Vector<String>();
        aux2.add("dataA");
        aux2.add("dataB");
        aux2.add("dataC");
        
        main.add(aux1);
        main.add(aux2);
        
        return main;
    }
}

Aparentemente já funciona bem, agradecido na mesma.

Uma pequena alteração à JSF:

<!-- table data/body -->
            <rich:columns value="#{MatrixBean.main[ind]}" var="singleCellData" index="ind">
                <h:outputText value="#{mainData[ind]}" />
</rich:columns>

Da maneira que estava, o número de colunas apresentadas estava dependente do número de elementos no header, o que poderia não ser correcto. Deste modo o número de colunas é o número de elementos no vector, tal como deve ser. Espero que ajude alguém que precise.

Bom dia,
Acho que nesse tópico você conseguirá exclarecer as suas dúvidas.

[]´s

Daniel

Obrigado Daniel.

Em princípio o meu problema já está resolvido. A grande diferença em relação à maioria dos exemplos que encontro é que eu não tenho um número definido de colunas nem de linhas, apenas me posso guiar pelo tamanho dos vectores que utilizo.

Vou guardar o tópico que indicaste nos bookmarks caso venha a precisar, obrigado de novo.

Se não tiver um padrão de colunas talvez seja melhor utilizar o rich:repeat
Link: http://livedemo.exadel.com/richfaces-demo/richfaces/repeat.jsf

[]´s

Daniel