Criando um formulário para entrada de dados
O componente BeanEditForm cria uma interface gráfica para edição de dados de um objeto JavaBean.
Criar três novos pacotes org.exemplo.t5teste.entities, org.exemplo.t5teste.dao e org.exemplo.t5teste.pages.usuario.
Criar uma nova pasta src/main/resources/org/exemplo/t5teste/pages/usuario.
src/main/resources/org/exemplo/t5teste/pages/usuario/ Cadastro.tml
<html t:type="layout" title="Cadastro de Usuarios" t:sidebarTitle="Current Time" xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> <t:beaneditform object="usuario" submitLabel="Gravar"> </t:beaneditform> </html>
src/main/java/org.exemplo.t5teste.pages.usuario. Cadastro.java
package org.exemplo.t5teste.pages.usuario; import org.apache.tapestry5.annotations.Property; import org.exemplo.t5teste.entities.Usuario; public class Cadastro { @Property private Usuario usuario; }
src/main/java/org.exemplo.t5teste.entities. Usuario.java
package org.exemplo.t5teste.entities; public class Usuario { private String login; private String passwd; private String email; private int ativo; private long id; // getters e setters devem ser criados aqui... }
Testando o formulário do BeanEditForm
O Tapestry verifica em tempo de execução se houve alterações nos arquivos de templates, classes e catálogos dos componentes. Se for alterado um arquivo que não faz parte dos componentes ou houver um arquivo novo, é preciso parar e reiniciar a aplicação.
http://localhost:8080/t5teste/usuario/cadastro
Acrescentando a Validação ao BeanEditForm
Existem duas maneiras de informar o framework sobre a necessidade de validação dos dados.
- Declarar o parâmetro t:validade dentro do template tml.
- Declarar anotações @Validate nas propriedades dentro da classe java.
Existem algumas validações fornecidas pelo framework (required, min, max, minLength, maxLength, regexp), mas também é possível implementar outras via “Contribute” dentro do arquivo AppModule.
src/main/java/org.exemplo.t5teste.entities. Usuario.java
... @Validate("required,maxlength=15") //Validações separadas por vírgula e sem espaço public String login; ... @Validate("required,minlength=6") public String passwd; ... @Validate("required,email") public String email; ...
O atributo reorder é usado para definir a ordem dos campos no form, o exclude para remover campos do form.
src/main/resources/org/exemplo/t5teste/pages/usuario/ Cadastro.tml
... <t:beaneditform object="usuario" submitLabel="Gravar" reorder="login,passwd,email" exclude="id"> ...
Reinicie a aplicação para testar.
http://localhost:8080/t5teste/usuario/cadastro
Ao clicar no botão Gravar o tapestry começa a validação, primeiro no lado cliente usando javascript, depois, quando não houver erros ou se o javascript estiver desabilitado, a requisição é validada no servidor, nesse ponto podemos fazer validações adicionais em cada campo ou entre eles (onValidateFrom… e onValidateForm respectivamente). Quando a validação é concluída sem erros o controle é passado ao método onSuccess, se houver erro na validação o controle passa para o onFailure. Após a validação ter sucesso, ou não, o controle passa ao método onSubmit, depois o tapestry retorna a resposta para o browser. O comportamento padrão para o submit no T5 é chamar a classe java da própria página, renderizar ela novamente e enviar ao navegador, mas no retorno do onSubmit (ou noutro método) podemos redirecionar para qualquer endereço, dentro ou fora da aplicação.
Sequência dos eventos:
Render events:
- prepareForRender
- prepare
Submit events:
- prepareForSubmit
- prepare
- validateForm
- failure or success
- submit
Alterar o label dos campos usando o catálogo de mensagens (veja o tópico Internacionalização).
src/main/resources/org/exemplo/t5teste/pages/usuario/ Cadastro.properties
#Labels.
email-label=E-Mail
passwd-label=Senha
ativo-label=Status
Substitua a caixa de texto (do campo "ativo") por um dropdown list (select), declare um parâmetro para esse campo informando qual componente deve ser usado para representa-lo, nesse caso o Select. No campo "senha" use o componente PasswordField. Modifique a aparência do formulário usando a tag <style> no template da página.
src/main/resources/org/exemplo/t5teste/pages/usuario/ Cadastro.tml
... <t:beaneditform object="usuario" submitLabel="Gravar" reorder="login,passwd,email" exclude="id"> <p:passwd> <t:label for="passwd"/> <t:passwordField t:id="passwd" value="usuario.passwd"/> </p:passwd> <p:ativo> <t:label for="ativo"/> <t:select t:id="ativo" value="usuario.ativo" model="literal:0=Inativo,1=Ativo"/> </p:ativo> </t:beaneditform> ... <style> DIV.t-beaneditor { background-color: #ECECF2; } DIV.t-beaneditor LABEL { width: 90px; } </style> ...
É necessário configurar o tapestry para usar as linguagens que a aplicação vai dar suporte (ISO language code). Modifique a linha abaixo dentro do arquivo AppModule, definindo pt_BR como linguagem default, com suporte adicional a en.
src/main/java/org.exemplo.t5teste.services. AppModule.java
... configuration.add(SymbolConstants.SUPPORTED_LOCALES, "pt_BR,en"); ...
Reinicie a aplicação para testar.
http://localhost:8080/t5teste/usuario/cadastro
Mais informações
Usando o componente BeanEditor é possível editar campos de entidades diferentes dentro do mesmo form. O componente BeanDisplay pode ser usado para visualizar os dados.
No site do tapestry há uma vídeo-aula demonstrando o uso do componente BeanEditForm. Consulte o guia do BeanEditForm, sua referência e também a página de referência dos componentes.