Marcos Sousa’s Blog

Blog sobre desenvolvimento de software
  • rss
  • Home
  • Sobre

Jboss Seam – Getting started: Validação de formulário

Marcos Sousa | February 19, 2008

O Jboss Seam tem um suporte bem útil para validação de formulários. Ele pode ser integrado com o Hibernate Validator. Esta integração trás vantagens e desvantagens. A vantagem é que simplifica o desenvolvimento, através de anotações nas entidades é possível que os valores da entidade sejam validados. Por outro lado a aplicação fica dependente do Hibernate Validator para validar os dados. Em casos de validação simples, atende perfeitamente, mas para casos complexos é necessário a validação em lógica de negócio, e a nível de design da aplicação não sei até onde usar o Hibernate Validator é vantajoso.

Para a utilização da validação das entidades dentro da página basta colocar a tag:

<s:validateAll>
<!-- Todo os os componentes JSF inseridos aqui
dentro serão validados -->
</s:validateAll>

Outro recurso é o suporte a templates do Facelets que facilitam a padronização de: Rótulos, Componente de Entrada (Caixa de Texto, Caixa de seleção, Botões, etc) e as mensagens relacionadas ao componente. A seguir segue um exemplo de template:

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:s="http://jboss.com/products/seam/taglib">

<div>

<s:label styleClass="#{invalid?'msgErro':''}">
<ui:insert name="label"/>
<s:span styleClass="required" rendered="#{required}">*</s:span>
</s:label>

<span class="#{invalid?'msgErro':''}">
<s:validateAll>
<ui:insert name="Input"/>
</s:validateAll>
<h:graphicImage src="<font size="-1">#{facesContext.externalContext.request.contextPath}/</font>imagens/erro.gif" rendered="#{invalid}"/>
</span>

<s:message styleClass="msgErro"/>

</div>

</ui:composition>

Desta forma, todo campo obrigatório (atributo required=true) terá o * na frente do nome do componente. Caso contenha algum erro de validação, que deixa o componente com estado inválido, será mostrado o estilo: msgErro.

Para utilizar o template é necessário utiliza a tag s:decorate. Teremos que criar duas definições para o template: label e Input. Diversos exemplos do Jboss Seam não definem um nome para a parte relacionada ao Input, gerando duplicação de identificador de componentes quando estamos utilizando o recurso de templates do Facelets. O código ficaria semelhante ao abaixo:

<s:decorate id="NomeDecorator" template="/WEB-INF/templates/InputTemplate.xhtml">
<ui:define name="label">Nome:</ui:define>
<ui:define name="Input">
<h:inputText id="nome" value="#{meuBean.nome}" required="true">
<a:support event="onblur" reRender="NomeDecorator"/>
</h:inputText>
</ui:define>
</s:decorate>

Acima assumi que o template foi salvo com o nome InputTemplate.xhtml dentro do diretório templates dentro de web-inf. É importante salvar os templates dentro da pasta WEB-INF para proteger o acesso do usuário ao template.

Infelizmente o s:decorate não tem distinção aos tipos de mensagens JSF (Informação, Alerta, Erro, Fatal) das quais poderíamos colocar as mensagens de forma mais intuitiva para cada tipo de problema.

Categories
Java, Java Server Faces, Jboss Seam
Tags
Facelets, Hibernate Validator, Jboss Seam, s:decorate, s:validateAll, templates
Comments rss
Comments rss
Trackback
Trackback

« Visual C++ 2008 Beta! Microsoft irá disponibilizar a API de alguns produtos! »

Leave a Reply

Click here to cancel reply.

Núvens de tags

Agile Eventos Facelets GET Hibernate incompatiblidades Itext Java Java EE Java Magazine Java Server Faces JavaServer Faces Java Vídeo Magazine Jboss jboss-seam-itext Jboss Developer Studio Jboss Seam JDBC type: 7 JPA JSF linux mare marébh maré de agilidade Microsoft No Dialect mapping for JDBC type: 7 Page Actions PostGreSQL RHDS rich:fileUpload RichFaces Rich Faces RichFaces 3.2 Scrum Seam-gen Seam Framework Seam PDF Spring Spring Framework TDD URL Rewrite URL User Friendly Variable Resolver Vídeo Aula XP

Meus últimos tweets

  • Great article about the importance of sleeping. http://t.co/vfFyS1ri 16 hours ago
  • Aos participantes do Bhjs que gostariam de vir para a Globo.com, segue as outras vagas http://t.co/KjBinf4x #bhjs #beagajs 2 weeks ago
  • Se você precisa buscar dado no disco, prefira assíncrona @luciano #bhjs #beagajs http://t.co/5gCHp7P8 2 weeks ago
  • @DouglasAguiar @HerberthAmaral Porque na copa? 2 weeks ago
  • Slides da palestra 'Indo além com jQuery' #bhjs #beagajs http://t.co/wHbhaI75 2 weeks ago
  • @araujolucas na parte da frente a temperatura está melhor 2 weeks ago
  • Começando a palestra do @cmilfont no #bhjs #beagajs http://t.co/9DZt7MQj 2 weeks ago
  • @isaias_barroso @DeivissonBruno @cmilfont gula ao extremo:) 2 weeks ago
  • Palestra com insights do desenvolvimento do paparazzo #gcom #bhjs #beagajs http://t.co/7igVbtmS 2 weeks ago
  • @flavio1110 energético? 2 weeks ago

Anúcios

Categorias

  • .net
  • Agile
  • Agile Conference 2009
  • Artigos
  • Atualidades
  • c++
  • cinema
  • Django
  • DRY
  • Eventos
  • Flex
  • Formula 1
  • Hibernate
  • IDE
  • Inutilidades
  • Java
  • Java EE
  • Java Server Faces
  • Jboss Seam
  • linux
  • Mac OS
  • Microsoft
  • Open-source
  • Palestras
  • Python
  • RAD
  • RIA
  • RichFaces
  • Scrum
  • Software Livre
  • Spring
  • Spring Annotations
  • TDD
  • Testes
  • Uncategorized
  • Vídeo Aulas

Links recomendados

  • AJ Soluções
  • Ary Júnior
  • Erko Bridee
  • Fragmental
  • Fragmental TW
  • Guilherme Chapiewski
  • Handerson Frota
  • Jeveaux
  • Juliano Carniel
  • Onipresente
  • Passes de Letra
  • PortalJava.com
  • Rafael Carneiro
  • Rafael Pontes

DevMedia Post’s

Get Adobe Flash playerPlugin by wpburn.com wordpress themes
rss Comments rss valid xhtml 1.1 design by jide powered by Wordpress get firefox