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
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
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.
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.