Entrada de dados

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

CadastroUsuario

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

CadastroUsuarioValidate

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

CadastroUsuarioValidatePtBR

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.

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