Dicas JSF 1.2: Não use nome de resource e propriedade de beans iguais. Saiba pq.

Artigos, Hibernate, Java, Java EE, Java Server Faces, Spring, Vídeo Aulas, cinema 2 Comments »

Hoje, durante o trabalho tive um problema bastante interessante. Uma aplicação que estou desenvolvendo, usa JSF 1.2. Estava desenvolvendo um cadastro que tinha uma caixa de seleção, esta caixa de seleção carregava todos os clientes cadastrados. Estou usando os recursos de internacionalização e os recursos de declaração de resource-bundle do JSF 1.2, para centralizar o local onde são declarados os recursos de mensagens. Até aí tudo bem.

Algumas partes foram desenvolvidas usando JSF 1.1, estas partes eu me preocupei ao máximo manter a compatibilidade com o menor número de alterações possível. Antes de ter os recursos de mensagens centralizados, eu não me preocupei em manter um padrão de nomenclatura para os recursos de mensagem, meu grande erro. Conclusão, meu recurso de mensagens para o cadastro de clientes se chamava… tente adivinhar… cliente.

Como a minha humilde caixa de seleção vinculava seu valor a uma propriedade chamada cliente, começaram as dores de cabeça. Eu recebi uma exception não muito amistosa:

19/05/2008 23:06:40 javax.faces.component.UIInput updateModel
SEVERE: /contatos/contato.xhtml @44,46 value=”#{Contato.cliente}”: {0} object is read only base com.marcossousa.app.beans.ContatoBean@123efed property cliente
19/05/2008 23:06:40 com.sun.faces.lifecycle.RenderResponsePhase execute
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=myform:cliente[severity=(ERROR 2), summary=(/contatos/contato.xhtml @44,46 value="#{Contato.cliente}": {0} object is read only base com.marcossousa.app.beans.ContatoBean@123efed property cliente), detail=(/contatos/contato.xhtml @44,46 value="#{Contato.cliente}": {0} object is read only base com.marcossousa.app.beans.ContatoBean@123efed property cliente)]

Logo que ocorreu o problema fui verificar se o método Set do meu bean estava correto e verifiquei também se o Contato não era nulo. Tudo estava aparentemente correto, pesquisei sobre o assunto no “Oráculo” e não encontrei nenhuma informação relevante. Mais algum tempo de análise verificando se havia alguma correlação, e nada, mas estava chegando perto.

Vendo que eu iria perder muito tempo, tomei uma decisão: vou executar a aplicação usando os códigos fontes do JSF. Coloquei um breakpoint no código que seta os valores nas propriedades dos Managed Beans. Analisei os comportamentos durante cada chamada. Uma coisa não fazia sentido, era verificada a existência de um recurso de mensagens para cada propriedade. Restaurei os códigos fontes também da API para confirmar minhas suspeitas. E realmente e retornava o recurso de mensagens.

Apesar do tempo perdido, foi interessante resolver o problema. Espero que ajude alguém. Recapitulando:


<resource -bundle>
<base -name>com.foo.message</base>
<var>mymessage</var>
</resource>

public class Foo {
private String mymessage;
privates String getMymessage() {
return mymessage;
}
private void setMymessage(String s) {
this.mymessage=s
}
}

E


<h :inputText value="#{foo.mymessage}"/>

Não funciona!

Está aí uma grande vantagem de usar bibliotecas open-source, o problema é complexo, melhor olhar diretos nos fontes! Eu adoro fazer isto =)

Vídeo Aulas Jboss Seam: URL User Friendly

Artigos, Java, Java Server Faces, Jboss Seam, Vídeo Aulas No Comments »

Foi publicada ontem no portal Java Magazine a 5ª vídeo aula da série sobre JBoss Seam. Nesta vídeo aula eu mostrei como criar páginas em JSF usando o conceito de URL User Friendly.

O caminho não é complexo, como o JBoss Seam tem suporte ao protocolo Rest, para produzir páginas com URL amigáveis basta usar o URL Rewrite em conjunto. A integração entre os dois frameworks é bem simples: Basta criar um componente Seam fazendo o papel de Adapter ao Filtro que o URL Rewrite utiliza. Para criar as urls amigáveis, basta usar page actions do seam e configurar as rules do URL Rewrite.

Nas próximas partes irei mostrar a integração com Spring Framework, EJB e gerenciamento de escopos.

Críticas e sugestões são sempre bem vindas.
Download dos Fontes Vídeo Aula
Vídeo Aula

Vídeo aulas: Criação de Componentes com Facelets

Artigos, Java, Java Server Faces, Vídeo Aulas No Comments »

Foram publicadas no site Java Vídeo Magazine mais duas novas vídeos aulas onde eu apresentei como criar uma custom tag em facelets usando tags Files e quando elas devem ser criadas.

Segue os links:

Parte 1 e Parte 2.

Novas vídeos aulas disponíveis

Artigos, Hibernate, Java, Java Server Faces, Spring, Spring Annotations No Comments »

Um pouco atrasado mas, foi publicado no site da Java Magazine mais uma nova Vídeo Aula sobre JSF desta vez focada em componentes em Ajax.

Nas vídeo-aulas basicamente foi feito a configuração de bibliotecas RichFaces e Ajax4jsf, ajuste nos templates e estilos CSS, alteração dos botões de edição e novo na página de listagem para fazer requisições em ajax permitindo a inclusão e edição de registros na própria página de listagem.

Elas podem ser vistas através dos links:
Ajax em JSF: RichFaces e Ajax4faces - Parte 1
Ajax em JSF: RichFaces e Ajax4faces - Parte 2

WP Theme & Icons by N.Design Studio
Assine Assine os comentarios