sexta-feira, 22 de maio de 2009

[JSF] Tomahawk: java.lang.IllegalStateException: ExtensionsFilter not correctly configured ....

Quem nunca passou por isso antes? Talvez a maioria, mas eu passei por isso a três anos atrás e hoje novamente. Na primeira vez eu resolvi mas não fazia a mínima de como, talvez tenha desistido do que estava fazendo e pronto. Mas na segunda vez tomei a iniciativa de publicar a solução, que é bastante simples.

As primeiras linhas do erro:
java.lang.IllegalStateException: ExtensionsFilter not correctly configured. Resource mapping missing. Resources cant be delivered. Please see: http://myfaces.apache.org/tomahawk/extensionsFilter.html
at org.apache.myfac...ory.throwExtensionsFilterMissing(AddResourceFactory.java:371)
at org.apache.myfac...AddResourceFactory.checkEnvironment(AddResourceFactory.java:352)
at org.apache.myfac...AddResourceFactory.getInstance(AddResourceFactory.java:288)
at org.apache.myfaces...Renderer.encodeEnd(HtmlTabbedPaneRenderer.java:88)
at javax.faces.compon...tBase.encodeEnd(UIComponentBase.java:536)
at com.sun.facelets...nentSupport.encodeRecursive(ComponentSupport.java:242)
Talvez minha inexperiência em JSF na época fossem o motivo para não ter encontrado a resposta, hoje quando procurei no Google achei até meu post de dúvida no GUJ de 2006, sem respostas obviamente. Mas hoje a história foi diferente, corri atrás dos erros analizando-os cuidadosamente.

O cenário do erro:

Desenvolvendo, feliz da vida, algumas telinhas cheias de controles e umarruma de requisições JSF cheguei a uma necessidade de ter um popup. Nada de complicado até agora, qualquer faz um popup seja com divs, outras janelas etc, mas dentro delas haveriam várias telas. Mas uma situação comum em nossas vidas de desenvolvedores. Pensei "Se são várias, mas não apareceram simultâneamente então vou usar tabs". E lá fomos nós de um componente JSF para isso. Existem vários mas como estamos utilizando o Tomahawk aqui então pegamos o t:panelTabbedPane juntamente como o t:panelTab. Montamos a tela e então .... o erro.

Actually um outro desenvolvedor que estava cuidando desta tela e, sabiamente, ao dar de cara com o erro foi procurou o sábio mestre dos mestres Google. Passeando pelas suas vias de sabedoria me procurou, me mostrou o erro e eu disse "Eu já vi isso antes, mas não lembro como resolve. Procura no Google!" E ele respondeu "Já procurei, olha o que eu achei!" e em seguida me mostrou o meu post no GUJ com a mesma dúvida. Pensei logo em chamar o Chapolin Colorado mas lembrei que ele já está bem velho, então fui lê o erro novamente, com mais atenção.

Localizando a solução:

Logo na primeira linha do erro vemos:
ExtensionsFilter not correctly configured. Resource mapping missing. Resources cant be delivered. Please see: http://myfaces.apache.org/tomahawk/extensionsFilter.html
Verifiquem o trecho em negrito. É lá que conseguiremos a solução para todos os nossos problemas. Lá ele diz logo para mapear o ExtesionFilter do MyFaces. Procurei no meu web.xml e já estava mapeado. Passei mais alguns minutos e caiu a ficha (ou o crédito do cartão). No meu arquivo de configuração tinha:
<filter-lass>org.apache.myfaces.component.html.util.ExtensionsFilter</filter-class>
E no site informado tinha:
<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
Pensei, puxa como os outros são burros por não terem visto que era diferente (claro que eu não ia me acusar). Troquei mas o erro continuou .... As pessoas realmente não aprendem, sempre temos que ler uma solução até o fim. Ainda faltava um filter-mappping:
<filter-mapping>
<filter-name>MyFacesExtensionsFilter</filter-name>
<url-pattern>*.jsf</url-pattern>
</filter-mapping>
Adicionei ao web.xml, reiniciei o Container Web e Voilá!! Tudo funcionou bem bonitinho.

Essa é apenas mais uma solução, simples, para mais um problema, simples.

Esta foi outra lição toon
E se você pouco sabia
Caminhando pelo mundo
Vai aprender o que não queria!

Fonte: http://myfaces.apache.org/tomahawk/extensionsFilter.html

Nenhum comentário:

Postar um comentário