Problema em acessar métodos em managed bean

2 respostas
gtludwig

Pessoal,

Tenho uma lista em uma página JSF 2 + RichFaces 4 com itens que devem ser movidos para o topo da lista, uma posição acima, uma abaixo, última posição ou removidos da lista. A idéia é que ao clicar na imagem que representa a ação, deve ser passado para o bean uma referência da posição do item na lista.

A tabela está definida como:

<rich:panel id="batchPanel">
    <table border="1" class="dr-table rich-table" width="100%">
        <a4j:repeat value="#{assemblyMB.batchLDM}" var="batch" rowKeyVar="row">
        <tr>
            <td>col1</td>
            <td>col2</td>
            <td>col3</td>
            <td>
                <a4j:commandLink action="#{assemblyMB.moveBatchToTop[row]}" render="batchPanel">
                    <h:graphicImage value="/images/icons/arrow_top.png" />
                </a4j:commandLink>
                <a4j:commandLink action="#{assemblyMB.moveBatchUpOnePosition[row]}" render="batchPanel">
                    <h:graphicImage value="/images/icons/arrow_up.png" />
                </a4j:commandLink>
                <a4j:commandLink action="#{assemblyMB.moveBatchDownOnePosition[row]}" render="batchPanel">
                    <h:graphicImage value="/images/icons/arrow_down.png" />
                </a4j:commandLink>
                <a4j:commandLink action="#{assemblyMB.moveBatchToBottom[row]}" render="batchPanel">
                    <h:graphicImage value="/images/icons/arrow_bottom.png" />
                </a4j:commandLink>
                <a4j:commandLink action="#{assemblyMB.deleteBatch[row]}">
                    <h:graphicImage value="/images/icons/delete.png" />
                </a4j:commandLink>
            </td>
        </tr>
    </table>
</rich:panel>
No bean, são chamados métodos de um service (bservice) para reordenar a lista, que não consigo acessá-los da página. Os métodos no service funcionam e estão definidos no bean assim:
public void moveBatchToTop(int batchPos) {
    System.out.println("moveBatchToTop: " + batchPos);
    bservice.reorderBatchList(batchList.get(batchPos);
}

public void moveBatchUpOnePosition(int batchPos) {
    System.out.println("moveBatchUpOnePosition: " + batchPos);
    bservice.reorderBatchList(batchList.get(batchPos), (batchPos - 1));
}

public void moveBatchDownOnePosition(int batchPos) {
    System.out.println("moveBatchDownOnePosition: " + batchPos);
    bservice.reorderBatchList(batchList.get(batchPos), (batchPos + 1));
}

public void moveBatchToBottom(int batchPos) {
    System.out.println("moveBatchToBottom: " + batchPos);
    bservice.reorderBatchList(batchList.get(batchPos), batchList.size() + 1);
}

public void deleteBatch(int batchPos) {
    batchList.remove(batchPos);
}

Como eu posso resolver isso?

Obrigado desde já,
Gustavo

2 Respostas

dreampeppers99

Porque voce nao usou o rich:dataTable ? Com ela e bem simples resolver isso, inclusive ja se tem o ordenamento built-in. E mesmo que esteja pensando em criar um componenete proprio, tente usar os rich:column ou h:column para compor seu componenete.

gtludwig

Eu peguei essa forma de tabela de outro projeto onde o <rich:dataTable /> não tinha funcionado bem, mas os requisitos eram outros e a quantidade de dados também era muito maior.

Vou tentar com o <rich:dataTable />, mas com ele vou conseguir manipular os dados da lista? Eu não preciso ordenar pelo valor das colunas, mas preciso mover o item de acordo com os métodos definidos!

Criado 6 de julho de 2011
Ultima resposta 6 de jul. de 2011
Respostas 2
Participantes 2