Listagem no Grid

Criando uma página com Grid

O componente Grid cria uma interface gráfica para visualização dos dados em forma de tabela, permitindo a navegação entre os registros e a ordenação por coluna. O Grid recebe a lista de objetos através do parâmetro source="nome_do_List".

src/main/resources/org/exemplo/t5teste/pages/usuario/ Index.tml

<html t:type="layout" title="Lista de Usuarios"
    t:sidebarTitle="Current Time" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd"
    xmlns:p="tapestry:parameter">
 
    <table t:type="grid" source="lista">
    </table>            
 
    <p>
        [
        <t:pagelink page="usuario/cadastro">Cadastro de Usuarios</t:pagelink>
        ]
    </p>
 
</html>

src/main/java/org.exemplo.t5teste.pages.usuario. Index.java

package org.exemplo.t5teste.pages.usuario;
 
import java.util.List;
 
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.hibernate.annotations.CommitAfter;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.exemplo.t5teste.dao.GenericDAO;
import org.exemplo.t5teste.entities.Usuario;
import org.hibernate.Session;
 
public class Index 
{
    @Property
    private Usuario usuario;
 
    @Inject
    private Session session;
 
    public List<?> getLista()
    { 
        final GenericDAO dao = new GenericDAO(session, Usuario.class);
        return dao.getList(); 
    }
 
    public void onActionFromRemover(long idUsuario)
    {
        remover(idUsuario);        
    }
 
    @CommitAfter
    public void remover(long idUsuario)
    {
        final GenericDAO dao = new GenericDAO(session, Usuario.class);
        dao.deleteById(idUsuario);
    }                            
}

Acrescente o link para a página Index no template do cadastro de usuários.

src/main/resources/org/exemplo/t5teste/pages/usuario/ Cadastro.tml

...
    [
    <t:PageLink t:page="Usuario/index">Listagem</t:PageLink>
    ]
...

Reinicie a aplicação para testar.

Cadastre o(s) usuário(s).

http://localhost:8080/t5teste/usuario/cadastro

Veja a listagem no Grid.

http://localhost:8080/t5teste/usuario

ListarUsuarios

O componente Grid gerou uma tabela com os dados do atributo source=”lista”. Observe que as colunas tem links, para ordenar os registros automaticamente.

Ajustando o comportamento do Grid

Podemos configurar o componente Grid usando seus atributos e métodos.

  • rowsPerPage="n" - Controla a quantidade de registros (n) por página.
  • exclude="nomeDosCamposSeparadosPorVirgula" - Configura o Grid (ou o BeanEditForm) para não mostrar o(s) campo(s) informados, case-insensitive.
  • include="nomeDosCamposSeparadosPorVirgula" - Configura o Grid (ou o BeanEditForm) para mostrar apenas o(s) campo(s) informados, case-insensitive.
  • reorder="nomeDosCamposSeparadosPorVirgula" - Informa a ordem dos campos no Grid (ou no BeanEditForm).

Criar duas colunas adicionais e colocar os links para editar e remover registros. O link "Editar" vai passar o ID do usuário, como contexto, para a página de cadastro. Alterar a tag table acrescentando o atributo row e os componentes p:empty, PageLink e ActionLink no template do Grid.

src/main/resources/org/exemplo/t5teste/pages/usuario/ Index.tml

...
<table t:type="grid" source="lista" rowsPerPage="2" row="usuario"
    exclude="passwd" reorder="login,email,ativo" add="editar,remover">
 
    <p:editarCell>
        <a href="#" t:type="PageLink" t:id="Editar" page="usuario/cadastro" context="usuario.id">Editar</a>
    </p:editarCell>
 
    <p:removerCell>
        <t:ActionLink t:id="Remover" context="usuario.id"
            onclick="return window.confirm('Deseja excluir este usuario?');">
            Remover</t:ActionLink>
    </p:removerCell>
 
    <p:empty/>
</table>
...

http://localhost:8080/t5teste/usuario

ListarUsuariosLinks

Passando dados entre as páginas da aplicação

Na classe cadastro de usuarios (…/pages/usuario/Cadastro.java) declaramos os métodos onActivate() e onPassivate() para usar o contexto gerado no link da página que lista os usuários (…/pages/usuario/Index.java).

Outro modo de passar os dados seria usar anotações @Persist para manter os dados na sessão, injetar a página seguinte, atualizar seu estado, e retornar essa nova página para o framework.

InjectPage

Existe ainda a anotação @SessionState (veja o tópico Conceitos), ela cria um objeto que pode ser compartilhado por todas as páginas para um mesmo usuário.

Mais Informações

No site do tapestry há uma vídeo-aula demonstrando o uso do componente Grid. Consulte também a referência do Grid, o Page Navigation Patterns e a página de referência dos componentes.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License