out 01

Fazendo richfaces funcionar com JSF no tomcat 6

Depois de muito garimpar  consegui fazer funcionar o richfaces , vou resumir do que precisamos:

1)Baixar os JARs e colocalos no classpath da aplicação

1.1) richfaces-api-3.3.0.GA.jar

1.2)richfaces-impl-3.3.0.GA.jar

1.3)richfaces-ui-3.3.0.GA.jar

1.4)commons-logging-1.1.1.jar

1.5)commons-digester-1.8.jar

1.6)commons-beanutils-1.6.1.jar

2)adicionar ao web.xml do seu projeto o seguinte

<context-param>

<param-name>org.richfaces.SKIN</param-name>

<param-value>blueSky</param-value>

</context-param>

<context-param>

<param-name>org.richfaces.CONTROL_SKINNING</param-name>

<param-value>enable</param-value>

</context-param>

<filter>

<display-name>RichFaces Filter</display-name>

<filter-name>richfaces</filter-name>

<filter-class>org.ajax4jsf.Filter</filter-class>

</filter>

<filter-mapping>

<filter-name>richfaces</filter-name>

<servlet-name>Faces Servlet</servlet-name>

<dispatcher>REQUEST</dispatcher>

<dispatcher>FORWARD</dispatcher>

<dispatcher>INCLUDE</dispatcher>

</filter-mapping>

3) Adicione às suas JSPs

<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>

e pronto , agora para mais detalhes sobre como desfrutar desse framework  fenomenal acesse sua documentação .

out 01

Utilizando information_schema postgres

Para aqueles que utilizam o postgres em suas aplicações de pequeno porte, pode não ser muito útil minha dica, porém para aplicações que utilizem centenas de tabelas a alteração em massa dos dados de definição do banco são de fundamental importância na eficiência de um projeto. Vou dar uns exemplos que utilizo no estágio que são de grande valia.

Digamos que você tem nas suas mão um schema com mais de 100 tabelas  sendo que essas tabelas foram criadas todas com letras maiúsculas , o que leva o postgres a aceitar somente as  consultas utilizando aspas ( ” )  envolvendo o nome das tabelas e dos atributos um pé no saco isso . O que fazer então para fazer as consultas só jogando o nome das tabelas? A idéia principal então é alterar o nome das tabelas para letras minúsculas, e também seus campos. Porém são mais de 100 tabelas , o que caso você vá fazer isso através do PGadmin vá levar algumas horas desnecessárias . Então o que fazer? É aí que vem o information_schema para salvar a vida dos dbas de plantão. Para tal façanha faremos um select na tabela information_schema.tables só que da seguinte maneira:

SELECT  ‘ALTER TABLE  nome_do_schema.”‘ || table_name ||'” RENAME TO ‘||LOWER(table_name) ||’;’
FROM information_schema.tables
WHERE table_schema = ‘nome_do_esquema’

Através deste Select vc terá o comando de alteração para todas as tabelas do schema assim só tendo que copiar e colar o resultado para uma nova guia de query do postgres e eliminar as aspas( ” ) que o postgres coloca no início e no final de cada comando( Opa ! perae kct!! Trabalho de corno não!!)  . Bom voltemos um pouquinho então , utilizaremos um programinha editor de texto qualquer, no meu caso eu uso o editplus , onde colo o resultado da query e mando subsituir “ALTER po ALTER e “; por  ; assim poupando-nos do trabalho de corno. Após feito isso colo os comandos  sem as malditas aspas no início e no final de cada linha na tela de Query do pgAdmin e mando executar os comandos. Voi-lá, agora é só esperar o postgres fazer o resto, poupando-lhe um tempo valioso.

Tenho muito mais dicas de como usar o information_schema para facilitar modificações em massa. Mas cada um utilize para o que for preciso, apenas estou aqui para dar o pontapé inicial.

out 01

Problemas com Datatable

Vou começar com um pequeno problema , simples porém me levou um tempo para descobrir a solução( méritos para meu caro colega Salomão) . Um pequeno briefing do caso:

Estava eu desenvolvendo uma aplicação simples utilizando JSF + hibernate quando me deparei com um pequeno problema, como passar o objeto listado na linha da minha datatable para uma outra página JSP para possível detalhamento, exclusão ou alteração das propriedades do objeto, o qual é um managed bean. Depois de algumas horas perdidas no google em vão, meu caro amigo Salomão me forneceu a malda, utilizar a tag <f:setPropertyActionListener>. Vou mostrar um exemplo para facilitar o entendimento do uso da tag.

<h:form>

<h:datatable value=”#{usuario.livros}”  var =”livrousu”>

<h:commandLink  value = “#{livrousu.nome}” action=”detalhar”>

<f:setPropertyActionListener value = “#{livrousu.id}” target = “#{livro.id}” />

<f:setPropertyActionListener value = “#{livrousu.nome}” target = “#{livro.nome}” />

<f:setPropertyActionListener value = “#{livrousu.resumo}” target = “#{livro.resumo}” />

</h:commandLink>

</h:datatable>

<h:/form>

Onde livro é um managed bean com escopo REQUEST o qual se relaciona com usuário através de um ArrayList de livros na classe Usuario.
Na tag o atributo value é preenchido com a expressão do atributo do objeto que está sendo listado na datatable e o atributo target é a expressão com o atributo do managed bean Livro que tem escopo Request o qual será setado o valor do objeto listado.
Assim sendo ao clicar no commandLink eu sou levado para a página de detalhamento do livro que irá buscar no Managed Bean Livro suas propriedades, setadas através da tag .

Ainda não consegui descobrir um meio de passar o objeto inteiro, apenas passar seus atributos. Mas isso já resolveu meu problema.

Se alguém souber outros métodos de fazer a passagem de valores através do datatable por favor poste comentários sobre tal.

set 30

Hello world!

Meu primeiro post nesse novo blog, agora no meu domínio, vou passar todos os posts do blog antigo para cá, e pretendo manter agora o blog mais ativo, falando um pouco de tudo.