Algum exemplo de rich:dataTable?

7 respostas
javer

Alguém teria algum exemplo de como usar rich:dataTable com dados do BB?

Peguei esse exemplo aqui mas não sei como popular a tabela com dados do meu bd.

<a4j:region> <rich:dataTable value="#{dataTableScrollerBean.allCars}" var="category" rows="20" rowKeyVar="row" ajaxKeys="#{dataTableScrollerBean.keys}" id="table"> <f:facet name="header"> <h:outputText value="Cars Store"/> </f:facet> <rich:column> <f:facet name="header"> <h:outputText value="Make" /> </f:facet> <h:outputText value="#{category.make}" id="make" /> </rich:column> <rich:column> <f:facet name="header"> <h:outputText value="Model" /> </f:facet> <h:outputText value="#{category.model}" id="model" /> </rich:column> <rich:column> <f:facet name="header"> <h:outputText value="Price" /> </f:facet> <h:outputText value="#{category.price}" id="price" /> </rich:column> <rich:column> <f:facet name="header"> <h:outputText value="Mileage" /> </f:facet> <h:outputText value="#{category.mileage}" /> </rich:column> <rich:column width="200px"> <f:facet name="header"> <h:outputText value="VIN" /> </f:facet> <h:outputText value="#{category.vin}" /> </rich:column> <rich:column> <f:facet name="header"> <h:outputText value="Stock" /> </f:facet> <h:outputText value="#{category.stock}" /> </rich:column> <rich:column> <f:facet name="header"> Actions </f:facet> <a4j:commandLink ajaxSingle="true" id="editlink" oncomplete="#{rich:component('editPanel')}.show()"> <h:graphicImage value="/images/icons/edit.gif" style="border:0"/> <f:setPropertyActionListener value="#{category}" target="#{dataTableScrollerBean.currentItem}" /> <f:setPropertyActionListener value="#{row}" target="#{dataTableScrollerBean.currentRow}" /> </a4j:commandLink> <rich:toolTip for="editlink" value="Edit"/> <a4j:commandLink ajaxSingle="true" id="deletelink" oncomplete="#{rich:component('deletePanel')}.show()"> <h:graphicImage value="/images/icons/delete.gif" style="border:0"/> <f:setPropertyActionListener value="#{row}" target="#{dataTableScrollerBean.currentRow}" /> </a4j:commandLink> <rich:toolTip for="deletelink" value="Delete"/> </rich:column> <f:facet name="footer"> <rich:datascroller renderIfSinglePage="false" maxPages="5"/> </f:facet> </rich:dataTable> </a4j:region>

Alguma dica?

7 Respostas

yorgan

Algo parecido com isso:

Objeto (POJO)

public class Category {
    private String make;
    private String model
    private String price
 
    //Getters e Setters
}

Bean

public class DataTableScrollerBean{
      public List<Category> allCars;
      
      public DataTableScrollerBean() {
           carregarDados();
      }

      //metodo que monta a lista
      private void carregarDados() {
          Category c = new Category();
          c.setMake("GM");
          c.setModel("Corsa");
          c.setPrice("16.000");
          allCars.add(c);
      } 

      //get e set de allCars

}

JSP

<rich:dataTable value="#{dataTableScrollerBean.allCars}"
                                        var="category" rows="20"
                                        id="table">
                            <f:facet name="header">
                                <h:outputText value="Cars Store"/>
                            </f:facet>
                            <rich:column>
                                <f:facet name="header">
                                    <h:outputText value="Make" />
                                </f:facet>
                                <h:outputText value="#{category.make}" id="make" />
                            </rich:column>
                            <rich:column> 
                                <f:facet name="header">
                                    <h:outputText value="Model" />
                                </f:facet>
                                <h:outputText value="#{category.model}" id="model" />
                            </rich:column>
                            <rich:column>
                                <f:facet name="header">
                                    <h:outputText value="Price" />
                                </f:facet>
                                <h:outputText value="#{category.price}" id="price" />
                            </rich:column>
                        </rich:dataTable>

Faça um teste com esse código.

[]´s

Daniel

yorgan

Apenas para complementar:

[list]Você recebe a lista de dados do Bean através do parametro VALUE[/list]
[list]Ela então captura cada linha de dados e envia para a variavel declarada no parametro VAR. Você pode setar o nome que quiser nele. [/list]
[list]Para capturar o valor do objeto basta adiconar o nome da variavel do objeto declarada em sua classe ao nome da variavel, separado por ponto. Ex. category.make[/list]

[]´s

Daniel

javer

Perfeito amigo, deu certo sim o básico do básico, para eu iniciar entendendo mais esse componente.

Estou como um cego que tem que aprender a enxergar, durante 6 anos programei em Java Desktop (Swing) e agora estou aprendendo Java Web, estou achando fantástico mas surgem muitas dúvidas o tempo todo, estou lendo um livro (em PDF) Core JavaServer Faces (em inglês) mas as vezes o jeito que um usuário experiente explica é muito mais entender.

Ficou assim (inicialmente):
<rich:panel header="#{msgs.tituloUsuarios}" style="background-color: #ebf3fd;">
                <h:form id="UsuarioForm">
                    <a4j:region>
                        <rich:dataTable value="#{usuarioDataTableScrollerBean.allUsuarios}" var="usuario">
                            <rich:column>
                                <f:facet name="header">
                                    <h:outputText value="Nome" />
                                </f:facet>
                                <h:outputText value="#{usuario.nomeReal}" id="nomeReal" />
                            </rich:column>
                        </rich:dataTable>
                    </a4j:region>
                </h:form>
            </rich:panel>
public class UsuarioDataTableScrollerBean {
    private List<Usuario> allUsuarios;

    public UsuarioDataTableScrollerBean(){
        allUsuarios = new UsuarioDAO().getLista();
    }

    /**
     * @return the allUsuarios
     */
    public List<Usuario> getAllUsuarios() {
        return allUsuarios;
    }

    /**
     * @param allUsuarios the allUsuarios to set
     */
    public void setAllUsuarios(List<Usuario> allUsuarios) {
        this.allUsuarios = allUsuarios;
    }
}

O próximo passo é adicionar, editar e excluir o usuário do cadastro.

Agora uma pergunta mais genérica.
Qual é a abordagem "correta" para se fazer um cadastro? Como montar os formulários? (estou usando o Hibernate)

Muito obrigado, sua dica foi fantástica, eu sempre tenho dúvidas inicialmente sobre os Backing Beans (totalmente novo pra mim).

R

Só pra constar, se você carregar a lista a partir do construtor do BB (backing bean, ou managed bean) toda requisição que utilizar esse BB, ele vai recarregar a lista. (isso se o BB for de request)

O ideal é que a partir de um menu, onde cada item chame um action ou actionListener e nesse metodo você carregue a lista. Caso ela seja utilizada por vários request e não ouver necessidade de atualizar sempre você pode utilizar um escopo conversacional (pesquise sobre t:saveState)

Uma abordagem legal que tenho aqui, é usar um BB para um crud, duas páginas, uma para listagem e outra para formulário (o mesmo para inclusão, edição e exclusão)
Caso você vá fazer uma página mais complexa, ai melhor usar um BB só pra ela.

yorgan

Aqui tem um exemplo bem completo dessa parte de cadastro: http://www.guj.com.br/content/articles/jsf/jsf.pdf

Acho que isso vai ajudar mais do que irmos por partes aqui.

[]´s

Daniel

javer

Muito obrigado Daniel, e ao outro amigo que falou sobre carregar a lista em um menu.

Eu tenho um BB com um action que é chamado em um menu, porém como eu faria para carregar a lista em OUTRO BB?

Exemplo, tenho o MainMenuBean com:

public String usuarios() {
        return "usuarios";
    }

E tenho esse outro BB (UsuarioDataTableScrollerBean) que você viu que tem a Lista de usuários, como eu faço para nesse método do action do menu carregar a lista no outro bean?
[color=darkblue]
Francisco[/color]

R

Pagina com o menu:

&lt;h:commandLink action="#{UsuarioDataTableScrollerBean.carregar}"/&gt;

Você não tem q necessariamente usar só um BB por página, principalmente na pagina de menu, cada item de menu pode ter um action de um bb especifico.
Da também pra fazer de outras formas, usando
setPropertyActionListener por exemplo.
http://java.sun.com/javaee/javaserverfaces/1.2_MR1/docs/tlddocs/index.html

Criado 7 de maio de 2009
Ultima resposta 7 de mai. de 2009
Respostas 7
Participantes 3