Marcos Sousa’s Blog

Blog sobre desenvolvimento de software
  • rss
  • Home
  • Sobre

Tags JSTL em Facelets funcionam?

Marcos Sousa | April 24, 2008

Bom, já vi esta pergunta diversas vezes, e por diversos momentos eu também fiz a pergunta: porque o c:if não funciona corretamente, porque o c:forEach não executou minha lista?

Existe uma justificativa lógica para tal, que encontrei estes dias na seção de Faqs no WIKI do Facelets. Como eu já suspeitava tinha tudo a ver com o ciclo de execução das tags. Todas as tags JSTL em Facelets são rederizadas durante a restauração da view, ou seja, antes do processamento de ações, eventos e etc.

Este comportamento pode ser notado em tags do pacote core JSF, com exceção a tag f:verbatim. As tags facelets também são renderizadas durante a restauração da view, com exceção da ui:repeat.

Solução? Para substituir c:forEach use ui:repeat e para c:if crie um h:panelGroup controlando a visualização com o atributo rendered.

Comments
3 Comments »
Categories
Java EE, Java Server Faces
Tags
Facelets, JSF, JSTL
Comments rss Comments rss
Trackback Trackback

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.

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

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 14 hours ago
  • Aos participantes do Bhjs que gostariam de vir para a Globo.com, segue as outras vagas http://t.co/KjBinf4x #bhjs #beagajs 1 week 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