Naming Conventions
O tapestry usa uma convenção de nomenclatura no tratamento dos eventos, associando métodos aos id's dos componentes. Por exemplo: colocando o atributo t:id=”select” no componente ActionLink o framework vai chamar o método formado por um prefixo (nesse caso, onActionFrom) e usar o id do componente como sufixo (nesse caso, select), gerando a chamada ao método onActionFromSelect(Object parametro) passando como parâmetro o atributo que é declarado no atributo context=”…”. Se o método não existir na classe nada acontece ao clicar no link.
Convention over Configuration
O framework utiliza convenções para substituir algumas configurações em arquivo. Os templates, as classes e os recursos das páginas e componentes tem sua localização previamente convencionada. A localização dos outros arquivos da aplicação é de livre escolha do desenvolvedor.
Exemplo de localização das páginas:
- Classe (.java) - src/main/java/org.exemplo.t5teste.pages
- Template (.tml) - src/main/webapp ou src/main/resources/org.exemplo.t5teste.pages
- Catálogo (.properties) - src/main/resources/org.exemplo.t5teste.pages
Exemplo de localização dos componentes:
- Classe (.java) - src/main/java/org.exemplo.t5teste.components
- Template (.tml) - src/main/resources/org.exemplo.t5teste.components
- Catálogo (.properties) - src/main/resources/org.exemplo.t5teste.components
Anotações Tapestry
As anotações específicas do tapestry devem ser usadas somente nas classes que pertencem aos pacotes pages, components, mixins, base, data e entities.
- @Property - O tapestry cria em tempo de execução os métodos de acesso da propriedade (get e set).
- @Inject - É usada para injetar dependências e outros recursos.
- @IncludeStylesheet("context:layout/layout.css") - É uma forma de injetar o arquivo de estilo CSS, nesse caso, o arquivo layout.css está gravado na pasta src/main/webapp/layout/.
- @Persist - O tapestry usa um mecanismo de pool de páginas, depois de utilizadas elas são devolvidas ao pool e reutilizadas posteriormente por outros usuários, mas antes de devolver ao pool o framework reinicializa as variáveis de instância. A anotação mantém o estado do campo entre as requisições. A persistência pode usar as abordagens “Session” (default), “Client” ou “Flash”. A estratégia flash mantém os dados na sessão, mas o framework deleta seu conteúdo automaticamente após usar a informação para restaurar o estado da página. O método discardPersistentFieldChanges() limpa todos os dados persistentes da página, ele não afeta a página em memória, somente a requisição subsequente. Exemplo:
…
@Inject
private ComponentResources componentResource;
……
componentResource.discardPersistentFieldChanges();
…
- @SessionState - É um objeto que pode ser compartilhado por todas as páginas da aplicação (Session State Object – SSO). Seus dados são persistidos pelo framework e ficam vinculados a sessão de cada usuário.
Serviços
Um Serviço consiste basicamente de duas partes, interface e implementação. Ele deve ser declarado no arquivo AppModule.java fazendo a ligação (bind) entre a interface e sua implementação. O escopo padrão de um serviço é singleton, ele é criado pelo framework quando um método da interface for chamado pela primeira vez.
Características
O suporte a Ajax e a integração com os frameworks Spring e Hibernate, além da escalabilidade em ambiente de cluster, são características importantes do tapestry.
Mais informações
Consulte a página de referência dos componentes . Veja também os tópicos Configuring Tapestry , Tapestry IoC Services, Project Layout, Persistent Page Data e Persistent State.