- Remember: Namespace…
- Define: Composite Components
- Criação de Componentes JSF Básicos – Composite Components
- Pré-Condição: Possuir um projeto JSF configurado.
- PASSO 1: Criar a pasta que represente o Namespace
- PASSO 2: Criar a página xhtml que represente o componente
- PASSO 3: Criar o cabeçalho especifico para um componente JSF
- PASSO 4: Criar o contrato de uso de um Componente JSF
- PASSO 5: Criar a implementação do componente JSF
- Utilização de Componentes JSF Básicos – Composite Components
- Pré-Condição: Criar uma página XHTML a qual utilizará o componente
- Passo 1: Adicionar o Namespace criado à página
- Passo 2: Utilizar o componente
- } catch(Exceptions e) {
- Utilização de Componentes JSF Básicos – Composite Components
- } finally {
- }
Olá Pessoal, tudo bom?
Ao trabalhar com JSF existe um grave problema relacionado ao reuso de código entre as páginas xhtml de um projeto. Já existia uma solução para isso no JSF em sua versão 1.2, mas com o advento do JSF versão 2.0, essa parte foi reescrita de uma forma mais simples sendo chamada de Composite Components. O Objetivo principal desse post é analisar os aspectos básicos da criação de um componente JSF a partir da solução apresentada pela Composite Components
Remember: Namespace…
Todo componente em JSF deverá possui um namespace. Um namespace é conhecido como a definição de uma biblioteca de componentes JSF. Isso é realizado ao construir o cabeçalho de uma página xhtml, como mostra o código abaixo:
1 2 3 4 5 6 7 8 |
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"> <!-- algum conteudo aqui --> </html> |
Vamos pensar sobre a linha 2. Esta linha define um namespace “xmlns:ui=”http://java.sun.com/jsf/facelets”“.
- O primeiro pedaço “xmlns:” define o atributo de xml namespace ((Definição do Atributo XMLNS (2014). http://www.w3schools.com/tags/att_html_xmlns.asp))
- O segundo pedaço “ui=”http://java.sun.com/jsf/facelets”” define que o namespace será o do facelets ((API do Namespace Facelets (2014). http://docs.oracle.com/cd/E17802_01/j2ee/javaee/javaserverfaces/2.0/docs/pdldocs/facelets/ui/tld-summary.html))
Assim ao definir um namespace conforme a linha 2 estamos habilitando a página XHTML a utilizar qualquer componente relacionado a biblioteca facelets
Define: Composite Components
Criar um componente JSF até a versão 1,2 era uma tarefa muito árdua, veja um exemplo de tutorial aqui ((Creating a Custom JSF 1.2 Component – With Facets, Resource Handling, Events and Listeners (2009) – http://java.dzone.com/articles/creating-custom-jsf-12))
. A partir da versão 2.0 houve um bom avanço nesse aspecto com a criação do workflow de Composite Components ((The Java EE 6 Tutorial – Composite Components (2013). http://docs.oracle.com/javaee/6/tutorial/doc/giqzr.html))
. E será esse worflow que utilizaremos para criar componentes JSF.
Criação de Componentes JSF Básicos – Composite Components
Para criar um componente JSF utilizando o workflow Composite Components é necessário realizar uma pré condição, mais 5 passos
Pré-Condição: Possuir um projeto JSF configurado.
Existem várias formas de ter um projeto JSF configurado. Em breve teremos um tutorial explicando como realizar a configuração de um projeto JSF. Normalmente um projeto JSF terá a seguinte estrutura dentro da sua parte webapp, como mostra a Figura 01:
Ao observar a Figura 01 é possível verificar a existência da pasta “resources”. Esta contém 3 pastas (css, images e js), as quais armazenam informações referentes ao projeto.
PASSO 1: Criar a pasta que represente o Namespace
Este passo consiste em criar uma pasta que represente o Namespace dos componentes perante a biblioteca JSF. Assim dentro da pasta resources deverá ser criada uma nova pasta com um nome relativo ao escopo do projeto. Assim, como exemplo, para um projeto de Sistema Acadêmico, vamos criar uma pasta chamada sistemaAcademico, Figura 02. Nesta pasta estarão contidos todos os componentes relativos ao projeto.
PS: Um ponto que é importante deixar claro, esse passo será criado apenas 1 vez para cada Namespace
PASSO 2: Criar a página xhtml que represente o componente
Nesse passo será criado um arquivo XHTML para representar o componente dentro da pasta criada no Passo 1. O nome deste arquivo xhtml será o nome utilizado pelo componente. Por exemplo, cabecalhoAreaAcademica.xhtml
PASSO 3: Criar o cabeçalho especifico para um componente JSF
Dentro da página xhtml que representa o componente deverá ser criado o seguinte cabeçalho:
1 2 3 4 5 6 7 8 9 10 11 12 |
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite"> <h:body> <!-- algum conteudo aqui --> </h:body> </html> |
Caso seja necessário adicionar a biblioteca do PrimeFaces, adicionar o namespace da biblioteca:
1 |
xmlns:p="http://primefaces.org/ui" |
PASSO 4: Criar o contrato de uso de um Componente JSF
Um componente JSF é divido em 2 partes Interface e Implementation. A definição de interface é ((The Java EE 6 Tutorial – Composite Components (2013) – http://docs.oracle.com/javaee/6/tutorial/doc/giqzr.html)):
Declares the usage contract for a composite component. The composite component can be used as a single component whose feature set is the union of the features declared in the usage contract. Declara o contrato de uso para um composite component. O componente pode ser utilizado como um componente único, cujo conjunto de recursos é a união das características declaradas no contrato de uso.
Para definir uma interface dentro de um componente JSF é necessário utilizar a tag <composite:interface>, a qual é obrigatória para a definição de um componente
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite"> <h:body> <composite:interface> </composite:interface> <!-- algum conteudo aqui --> </h:body> </html> |
Para definir os atributos do contrato de uso da tag é necessário utilizar a tag . Essa tag é composta de 5 elements ((The Java EE 6 Tutorial – Attributes of a Composite Component (2013) – http://docs.oracle.com/javaee/6/tutorial/doc/gkhwv.html)):
- name – define o nome do atributo
- default – define o valor default do atributo, caso o atributo não seja informado
- required – define se o atributo é obrigatório
- method-signature – define que o valor do atributo será um metodo
- type – define o tipo do atributo. Deverá ser incluso o nome do package caso seja uma classe
Assim continuando o exemplo vamos definir um atributo que indique o nome da área científica. Esse atributo será do tipo java.lang.String, além disso será obrigatório.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite"> <h:body> <composite:interface> <composite:attribute name="nome" type="java.lang.String" required="true"/> </composite:interface> <!-- algum conteudo aqui --> </h:body> </html> |
PASSO 5: Criar a implementação do componente JSF
Como mencionado acima um componente JSF é divido em 2 partes Interface e Implementation. A definição de implementation é ((The Java EE 6 Tutorial – Composite Components (2013). – http://docs.oracle.com/javaee/6/tutorial/doc/giqzr.html)):
Defines the implementation of the composite component. If a composite:interface element appears, there must be a corresponding composite:implementation. Define a implementação de um composite component. Se existe uma tag composite:interface, deverá haver uma tag composite:implementation correspondente.
Assim a tag será definida após o fechamento da tag <composite:implementation>:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite"> <h:body> <composite:interface> <composite:attribute name="nome" type="java.lang.String" required="true"/> </composite:interface> <composite:implementation> </composite:implementation> </h:body> </html> |
Apósa criação da tag, será necessário codificar o que o componente deverá mostrar, neste caso um label descrevendo a área acadêmica:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core" xmlns:composite="http://java.sun.com/jsf/composite"> <h:body> <composite:interface> <composite:attribute name="nome" type="java.lang.String" required="true"/> </composite:interface> <composite:implementation> <h:panelGrid columns="2"> <h:outputLabel value="Nome Área Acadêmica:"/> <h:outputLabel value="#{cc.attrs.nome}"/> </h:panelGrid> </composite:implementation> </h:body> </html> |
Para exibir o atributo passado para o componente é necessário adicionar um pequeno código antes da exibição: cc.attrs
- cc significa composite componentes;
- attrs é o nome da map de atributos gerada pelo composite. Todos os atributos passados para um componente são adicionados a essa map;
E após isso seu componente estará codificado. Agora é hora de aprender a utilizá-lo.
Utilização de Componentes JSF Básicos – Composite Components
Agora é hora de realizar a utilização do componente criado. Para tanto existem passos a ser seguidos:
Pré-Condição: Criar uma página XHTML a qual utilizará o componente
Deverá ser criada uma página XHTML para a utilização do componente, por exemplo testeComponente.xhtml
1 2 3 4 5 6 7 8 9 10 11 12 |
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>Meu componente JSF</title> </h:head> <h:body> <h:outputText value="Meu componente JSF"/> </h:body> </html> |
Passo 1: Adicionar o Namespace criado à página
O primeiro passo é adicionar o namespace criado à página. Relembrando que o namespace é o nome da pasta que você criou no passo 1 da criação do componente. Para adicionar o seu namespace à página será necessário utilizar o seguinte padrão: xmlns:sigla=”http://java.sun.com/jsf/composite/nameSpace”
- onde sigla, é a sigla que será utilizada antes dos nomes dos componentes e nameSpace é o nome da pasta criada.
Um exemplo a partir do Sistema Acadêmico seria: xmlns:sa=”http://java.sun.com/jsf/composite/sistemaAcademico” O código abaixo indica como ficará essa adição do namespace:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:sa="http://java.sun.com/jsf/composite/sistemaAcademico"> <h:head> <title>Meu componente JSF</title> </h:head> <h:body> <h:outputText value="Meu componente JSF"/> </h:body> </html> |
Passo 2: Utilizar o componente
Após importar o namespace, será possível utilizar o componente, conforme exemplo abaixo passando a palavra Informática, Figura 03:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:sa="http://java.sun.com/jsf/composite/sistemaAcademico"> <h:head> <title>Meu componente JSF</title> </h:head> <h:body> <h:outputText value="Meu componente JSF"/> <sa:cabecalhoAreaAcademica nome="Informática"/> </h:body> </html> |
Ou informando a palavra Medicina, Figura 04:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:sa="http://java.sun.com/jsf/composite/sistemaAcademico"> <h:head> <title>Meu componente JSF</title> </h:head> <h:body> <h:outputText value="Meu componente JSF"/> <sa:cabecalhoAreaAcademica nome="Medicina"/> </h:body> </html> |
} catch(Exceptions e) {
Utilização de Componentes JSF Básicos – Composite Components
***************************************************************************
Problema: Passo 1 não foi realizado
Código Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html"> <h:head> <title>Meu componente JSF</title> </h:head> <h:body> <h:outputText value="Meu componente JSF"/> <sa:cabecalhoAreaAcademica nome="Informática"/> </h:body> </html> |
Exception: Critical Exception!: javax.faces.view.facelets.FaceletException: Error Parsing /testeComponente.xhtml: Error Traced[line: 12] The prefix “sa” for element “sa:cabecalhoAreaAcademica” is not bound. at com.sun.faces.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:436) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.compiler.SAXCompiler.doMetadataCompile(SAXCompiler.java:419) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.compiler.Compiler.metadataCompile(Compiler.java:130) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletFactory.createMetadataFacelet(DefaultFaceletFactory.java:327) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletFactory.access$200(DefaultFaceletFactory.java:93) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletFactory$2.newInstance(DefaultFaceletFactory.java:166) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletFactory$2.newInstance(DefaultFaceletFactory.java:164) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletCache$2.newInstance(DefaultFaceletCache.java:94) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletCache$2.newInstance(DefaultFaceletCache.java:89) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.util.ExpiringConcurrentCache$1.call(ExpiringConcurrentCache.java:99) [jsf-impl-2.1.7-jbossorg-2.jar:] at java.util.concurrent.FutureTask.run(FutureTask.java:262) [rt.jar:1.7.0_65] at com.sun.faces.util.ExpiringConcurrentCache.get(ExpiringConcurrentCache.java:114) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletCache.getViewMetadataFacelet(DefaultFaceletCache.java:143) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletCache.getViewMetadataFacelet(DefaultFaceletCache.java:62) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletFactory.getMetadataFacelet(DefaultFaceletFactory.java:260) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletFactory.getMetadataFacelet(DefaultFaceletFactory.java:209) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.application.view.ViewMetadataImpl.createMetadataView(ViewMetadataImpl.java:114) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:233) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:] at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:] at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:] at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_65]
***************************************************************************
Problema: Namespace inexistente acrescentado à página xhtml
Código Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:sa="http://java.sun.com/jsf/composite/sistemaAcademico1"> <h:head> <title>Meu componente JSF</title> </h:head> <h:body> <h:outputText value="Meu componente JSF"/> <sa:cabecalhoAreaAcademica nome="Informática"/> </h:body> </html> |
Exception: Critical Exception!: javax.faces.view.facelets.TagException: /layoutTeste.xhtml @12,26 Tag Library supports namespace: http://java.sun.com/jsf/composite/sistemaAcademico1, but no tag was defined for name: cabecalhoAreaAcademica at com.sun.faces.facelets.compiler.CompilationManager.pushTag(CompilationManager.java:304) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.compiler.SAXCompiler$CompilationHandler.startElement(SAXCompiler.java:266) [jsf-impl-2.1.7-jbossorg-2.jar:] at org.apache.xerces.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:496) at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:180) at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:275) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1653) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:324) at org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:845) at org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:768) at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:108) at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1196) at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:555) at org.apache.xerces.jaxp.SAXParserImpl.parse(SAXParserImpl.java:289) at javax.xml.parsers.SAXParser.parse(SAXParser.java:195) [rt.jar:1.7.0_65] at com.sun.faces.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:434) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:410) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.compiler.Compiler.compile(Compiler.java:124) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletFactory.createFacelet(DefaultFaceletFactory.java:305) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletFactory.access$100(DefaultFaceletFactory.java:93) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletFactory$1.newInstance(DefaultFaceletFactory.java:160) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletFactory$1.newInstance(DefaultFaceletFactory.java:158) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletCache$1.newInstance(DefaultFaceletCache.java:83) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletCache$1.newInstance(DefaultFaceletCache.java:78) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.util.ExpiringConcurrentCache$1.call(ExpiringConcurrentCache.java:99) [jsf-impl-2.1.7-jbossorg-2.jar:] at java.util.concurrent.FutureTask.run(FutureTask.java:262) [rt.jar:1.7.0_65] at com.sun.faces.util.ExpiringConcurrentCache.get(ExpiringConcurrentCache.java:114) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletCache.getFacelet(DefaultFaceletCache.java:121) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletCache.getFacelet(DefaultFaceletCache.java:62) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:256) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:201) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:768) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:100) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) [jsf-impl-2.1.7-jbossorg-2.jar:] at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:] at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:] at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_65]
***************************************************************************
Problema: Componente inexistente acrescentado à página xhtml
Código Exemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:sa="http://java.sun.com/jsf/composite/sistemaAcademico"> <h:head> <title>Meu componente JSF</title> </h:head> <h:body> <h:outputText value="Meu componente JSF"/> <sa:cabecalhoAreaAcademica1 nome="Informática"/> </h:body> </html> |
Exception: Critical Exception!: javax.faces.view.facelets.TagException: /layoutTeste.xhtml @12,46 Tag Library supports namespace: http://java.sun.com/jsf/composite/sistemaAcademico, but no tag was defined for name: cabecalhoAreaAcademica1 at com.sun.faces.facelets.compiler.CompilationManager.pushTag(CompilationManager.java:304) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.compiler.SAXCompiler$CompilationHandler.startElement(SAXCompiler.java:266) [jsf-impl-2.1.7-jbossorg-2.jar:] at org.apache.xerces.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:496) at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:180) at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:275) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1653) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:324) at org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:845) at org.apache.xerces.parsers.XML11Configuration.parse(XML11Configuration.java:768) at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:108) at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1196) at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:555) at org.apache.xerces.jaxp.SAXParserImpl.parse(SAXParserImpl.java:289) at javax.xml.parsers.SAXParser.parse(SAXParser.java:195) [rt.jar:1.7.0_65] at com.sun.faces.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:434) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.compiler.SAXCompiler.doCompile(SAXCompiler.java:410) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.compiler.Compiler.compile(Compiler.java:124) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletFactory.createFacelet(DefaultFaceletFactory.java:305) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletFactory.access$100(DefaultFaceletFactory.java:93) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletFactory$1.newInstance(DefaultFaceletFactory.java:160) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletFactory$1.newInstance(DefaultFaceletFactory.java:158) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletCache$1.newInstance(DefaultFaceletCache.java:83) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletCache$1.newInstance(DefaultFaceletCache.java:78) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.util.ExpiringConcurrentCache$1.call(ExpiringConcurrentCache.java:99) [jsf-impl-2.1.7-jbossorg-2.jar:] at java.util.concurrent.FutureTask.run(FutureTask.java:262) [rt.jar:1.7.0_65] at com.sun.faces.util.ExpiringConcurrentCache.get(ExpiringConcurrentCache.java:114) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletCache.getFacelet(DefaultFaceletCache.java:121) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletCache.getFacelet(DefaultFaceletCache.java:62) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:256) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.facelets.impl.DefaultFaceletFactory.getFacelet(DefaultFaceletFactory.java:201) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:768) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:100) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.7-jbossorg-2.jar:] at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139) [jsf-impl-2.1.7-jbossorg-2.jar:] at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:] at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:] at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:] at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:] at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:] at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_65]
} finally {
Espero que você tenha compreendido os aspectos básicos na hora de criar um Composite Component. Duvidas favor relatar nos comentários abaixo. Até a próxima!
Leave a Reply