Facelets com o Netbeans 6.1

Para quem deseja usar o Facelets com o Netbeans 6.1, finalmente (faz até algum tempinho) saiu o plugin do Facelets para Netbeans. Tem um artigo bem básico para quem deseja saber como isso pode ser feito, veja: Introduction to Facelets.
Bem, para quem tentou instalar a última versão do Facelets, seja a FCS 6.1 ou 6.1 ML (eu uso a primeira, pois prefiro usar minhas ferramentas de desenvolvimento em inglês), terá uma linda resposta, como esta (a data 200804211638 pode até estar ligeiramente diferente):

Missing required modules for Plugin Facelets Support:
JSP Parser [module org.netbeans.modules.web.jspparser/3 = 200804211638]

Para solucionar a questão, após descompactar o arquivo nbfaceletssupport-6.1.zip ou nbfaceletssupport-6.1ml.zip, você deve também descompactar o módulo org-netbeans-modules-web-frameworks-facelets.nbm (que foi extraído do anterior) e editar o arquivo que está em Info/info.xml de modo a trocar o ponto onde se faz menção a data por uma versão (eu use 1.0.0 :).

Meu arquivo original estava assim:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//NetBeans//DTD Autoupdate Module Info 2.5//EN" "http://www.netbeans.org/dtds/autoupdate-info-2_5.dtd">
<module codenamebase="org.netbeans.modules.web.frameworks.facelets" distribution="" downloadsize="0" homepage="https://facelets.dev.java.net" license="AD9FBBC9" moduleauthor="Petr Pisl & Po-Ting Wu" needsrestart="false" releasedate="2008/06/04">
    <manifest AutoUpdate-Show-In-Client="true" OpenIDE-Module="org.netbeans.modules.web.frameworks.facelets" OpenIDE-Module-Display-Category="Web" OpenIDE-Module-Implementation-Version="080604" OpenIDE-Module-Java-Dependencies="Java > 1.5" OpenIDE-Module-Long-Description="This module serves as a basic support for Facelets." OpenIDE-Module-Module-Dependencies="org.jdesktop.layout/1 > 1.3.23, org.netbeans.api.java/1 > 1.10.22, org.netbeans.api.web.webmodule > 1.7.21, org.netbeans.api.xml/1 > 1.13.21, org.netbeans.libs.facelets > 1.0.1, org.netbeans.modules.editor/3 > 1.26.21, org.netbeans.modules.editor.completion/1 > 1.6.22, org.netbeans.modules.editor.lib/1 > 1.9.21, org.netbeans.modules.html.editor/1 > 1.5.20, org.netbeans.modules.html.editor.lib/1 > 1.5.21, org.netbeans.modules.j2ee.dd/1 > 1.8.20, org.netbeans.modules.java.project/1 > 1.8.21, org.netbeans.modules.project.ant/1 > 1.12.22, org.netbeans.modules.project.libraries/1 > 1.13.21, org.netbeans.modules.projectapi/1 > 1.9.21, org.netbeans.modules.projectuiapi/1 > 1.13.21, org.netbeans.modules.servletjspapi/1 > 1.0.20, org.netbeans.modules.web.core.syntax/2 = 1, org.netbeans.modules.web.jsf/1 > 1.3.28, org.netbeans.modules.web.jspparser/3 = 200804211638, org.netbeans.modules.web.project > 1.6, org.netbeans.modules.xml.core/2 > 1.12.21.4, org.netbeans.modules.xml.xam/1 > 1.2, org.netbeans.modules.xml.xdm/1 > 1.2, org.netbeans.spi.palette/1 > 1.6.1, org.openide.awt > 6.7.22, org.openide.dialogs > 6.5.21, org.openide.explorer > 6.5.21, org.openide.filesystems > 6.4.21, org.openide.loaders > 5.9.21, org.openide.modules > 6.5.22, org.openide.nodes > 6.7.21, org.openide.options > 6.7, org.openide.text > 6.9.21, org.openide.util > 6.8.21, org.openide.windows > 6.5.21" OpenIDE-Module-Name="Facelets Support" OpenIDE-Module-Requires="org.openide.modules.ModuleFormat1" OpenIDE-Module-Short-Description="Support for development of web applications based on Facelets." OpenIDE-Module-Specification-Version="1.0.6"/>
    <license name="AD9FBBC9">[NO LICENSE SPECIFIED]
</license>
</module>

Ao invés de se fazer menção a um release de uma data específica, devemos fazer com que o módulo seja, digamos, um pouco menos exigente (ou menos estúpido!) e para isso devemos fazer com que ele utilize como referência uma versão mínima, por exemplo. Ao fim, o meu ficou assim:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//NetBeans//DTD Autoupdate Module Info 2.5//EN" "http://www.netbeans.org/dtds/autoupdate-info-2_5.dtd">
<module codenamebase="org.netbeans.modules.web.frameworks.facelets" distribution="" downloadsize="0" homepage="https://facelets.dev.java.net" license="AD9FBBC9" moduleauthor="Petr Pisl & Po-Ting Wu" needsrestart="false" releasedate="2008/06/04">
        <manifest AutoUpdate-Show-In-Client="true" OpenIDE-Module="org.netbeans.modules.web.frameworks.facelets" OpenIDE-Module-Display-Category="Web" OpenIDE-Module-Implementation-Version="080604" OpenIDE-Module-Java-Dependencies="Java > 1.5" OpenIDE-Module-Long-Description="This module serves as a basic support for Facelets." OpenIDE-Module-Module-Dependencies="org.jdesktop.layout/1 > 1.3.23, org.netbeans.api.java/1 > 1.10.22, org.netbeans.api.web.webmodule > 1.7.21, org.netbeans.api.xml/1 > 1.13.21, org.netbeans.libs.facelets > 1.0.1, org.netbeans.modules.editor/3 > 1.26.21, org.netbeans.modules.editor.completion/1 > 1.6.22, org.netbeans.modules.editor.lib/1 > 1.9.21, org.netbeans.modules.html.editor/1 > 1.5.20, org.netbeans.modules.html.editor.lib/1 > 1.5.21, org.netbeans.modules.j2ee.dd/1 > 1.8.20, org.netbeans.modules.java.project/1 > 1.8.21, org.netbeans.modules.project.ant/1 > 1.12.22, org.netbeans.modules.project.libraries/1 > 1.13.21, org.netbeans.modules.projectapi/1 > 1.9.21, org.netbeans.modules.projectuiapi/1 > 1.13.21, org.netbeans.modules.servletjspapi/1 > 1.0.20, org.netbeans.modules.web.core.syntax/2 = 1, org.netbeans.modules.web.jsf/1 > 1.3.28, org.netbeans.modules.web.jspparser/3 = > 1.0.0, org.netbeans.modules.web.project > 1.6, org.netbeans.modules.xml.core/2 > 1.12.21.4, org.netbeans.modules.xml.xam/1 > 1.2, org.netbeans.modules.xml.xdm/1 > 1.2, org.netbeans.spi.palette/1 > 1.6.1, org.openide.awt > 6.7.22, org.openide.dialogs > 6.5.21, org.openide.explorer > 6.5.21, org.openide.filesystems > 6.4.21, org.openide.loaders > 5.9.21, org.openide.modules > 6.5.22, org.openide.nodes > 6.7.21, org.openide.options > 6.7, org.openide.text > 6.9.21, org.openide.util > 6.8.21, org.openide.windows > 6.5.21" OpenIDE-Module-Name="Facelets Support" OpenIDE-Module-Requires="org.openide.modules.ModuleFormat1" OpenIDE-Module-Short-Description="Support for development of web applications based on Facelets." OpenIDE-Module-Specification-Version="1.0.6"/>
    <license name="AD9FBBC9">[NO LICENSE SPECIFIED]
</license>
</module>

Além disso, você terá que editar o arquivo META-INF/manifest.mf que se encontra dentro de netbeans/modules/org-netbeans-modules-web-frameworks-facelets.jar (novamente extraia o contéudo do arquivo, pois está dentro dele) e fazer a mesma coisa que fizemos com o arquivo info.xml. Após isso, monte novamente o arquivo org-netbeans-modules-web-frameworks-facelets.jar e coloque-o em netbeans/modules/ e finalmente monte o arquivo org-netbeans-modules-web-frameworks-facelets.nbm. E pronto! Isso será suficiente para o usarmos com o Netbeans 6.1!

Módulo Já Corrigido

Por comodidade, talvez você queira usar o pacote já pronto com as alterações que relato acima; baixe-o aqui: nbfaceletssupport-6.1.zip. Com as alterações que fizemos, ele irá (em princípio) funcionar em qualquer versão do Netbeans 6.xxx.

Thanks To

The JJ Blogger – Java, Oracle, PostgreSQL, and More… – If you need help installing Facelets with netbeans 6.1 or later and don’t understand portuguese, see this post.
Po-Ting Wu’s Weblog

About marciowb

Just one more geek...
This entry was posted in it, java. Bookmark the permalink.

7 Responses to Facelets com o Netbeans 6.1

  1. Anonymous says:

    Grande trabalho márcio, vou testar com o plugin do seam generator , pq o jboss tools no eclipse é impossivel de usar.Vc enviou essas alterações para o pessoal que mantem o projeto?

  2. O erro que relatei no post acima acontece com o Netbeans 6.1 com Patch 2 (e o ainda para ser lançado, Patch 3). Portanto se você instalar o Netbeans 6.1 do zero <>e não atualizá-lo<>, não terá este problema com o plugin do Facelets para Netbeans 6.1. A correção que sugiro acima, não dará suporte a code completion/insight. Pois quando se tenta invocar o recurso (CTRL + SPACE, por exemplo) um erro com o parser (a falta ) impede o uso desses recursos. O erro é o seguinte:java.lang.ClassNotFoundException: org.netbeans.modules.web.jsps.parserapi.JspParserAPI$ParseResult at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at org.netbeans.ProxyClassLoader.loadClass(ProxyClassLoader.java:244) at java.lang.ClassLoader.loadClass(ClassLoader.java:251) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)Caused: java.lang.NoClassDefFoundError: org/netbeans/modules/web/jsps/parserapi/JspParserAPI$ParseResult at org.netbeans.modules.web.frameworks.facelets.editor.FaceletsContextInfoImpl.getCachedParseResult(FaceletsContextInfoImpl.java:102) at org.netbeans.modules.web.frameworks.facelets.editor.FaceletsContextInfoImpl.getCachedParseResult(FaceletsContextInfoImpl.java:83) at org.netbeans.modules.web.core.syntax.JspUtils.getCachedParseResult(JspUtils.java:121) at org.netbeans.modules.web.core.syntax.JspUtils.getCachedParseResult(JspUtils.java:129) at org.netbeans.modules.web.core.syntax.JspSyntaxSupport.getParseResult(JspSyntaxSupport.java:209) at org.netbeans.modules.web.core.syntax.JspSyntaxSupport.getBeanData(JspSyntaxSupport.java:736) at org.netbeans.modules.web.core.syntax.completion.JspCompletionQuery.queryEL(JspCompletionQuery.java:357) at org.netbeans.modules.web.core.syntax.completion.JspCompletionQuery.query(JspCompletionQuery.java:128) at org.netbeans.modules.web.core.syntax.completion.JspCompletionProvider.queryImpl(JspCompletionProvider.java:192) at org.netbeans.modules.web.core.syntax.completion.JspCompletionProvider$Query.doQuery(JspCompletionProvider.java:110) at org.netbeans.modules.web.core.syntax.completion.JspCompletionProvider$AbstractQuery.query(JspCompletionProvider.java:211) at org.netbeans.spi.editor.completion.support.AsyncCompletionTask.run(AsyncCompletionTask.java:218) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:561)[catch] at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:986)BOAS E MÁS NOTÍCIAS:Após contatar o pessoal do Netbeans, fui informado pelo <>Jeff Rubinoff<> que no <>Netbeans 6.5<> teremos suporte <>nativo<> a <>Facelets<>. Já para o Netbeans 6.1, não há previsão (e pelo que ele falou, nem esperança) de lançamento de uma correção que permita o uso do plugin do Facelets no Netbeans.

  3. Fiz um teste com o Netbeans 6.5M1, Product Version NetBeans IDE Dev (Build 200807040101) e o plugin Facelets modificado que publiquei nesta página (não testei com o original do Facelets) e constatei que está funcionando tudo 100%! Incluindo code insight/completion, syntax highlight, tudinho!

  4. Oi, estou utilizando netbeans_6.5_beta e está funcionando td perfeitamente.thanks;

  5. ótimo trabalho. Meus parabéns… eu já tava desistindo de usar esse bicho. abraçaos.

  6. Robson Silva says:

    Muito bom! Ótimo Trabalho.

  7. delgado says:

    Olá Marcio,Fiz o teste com o Netbeans 6.5 e funcionou legal o autocomplete, mas apenas em arquivos com estrutura html. Se eu utilizar o ui:composition não tem acordo. Mesmo no projeto de exemplo (FaceletsTemplateExamples) este problema ocorre em arquivos com o ui:composition. Tem idéia de como corrigir isto?Parabéns pelo post. Abraços.

Leave a comment