• Skip to primary navigation
  • Skip to content

Mauda

IT, Java and Music

Graduação   SCJP   Mestrado
  • Apresentação
  • Certificação Java
  • JPA
    • Exceptions
  • JSF
  • Versionamento
  • Contato

Criando Componentes Básicos em JSF utilizando Composite Component

October 20, 2014 by Mauda Leave a Comment

Conteúdo do Post:
  1. Remember: Namespace…
  2. Define: Composite Components
  3. Criação de Componentes JSF Básicos – Composite Components
  4. Pré-Condição: Possuir um projeto JSF configurado.
  5. PASSO 1: Criar a pasta que represente o Namespace
  6. PASSO 2: Criar a página xhtml que represente o componente
  7. PASSO 3: Criar o cabeçalho especifico para um componente JSF
  8. PASSO 4: Criar o contrato de uso de um Componente JSF
  9. PASSO 5: Criar a implementação do componente JSF
  10. Utilização de Componentes JSF Básicos – Composite Components
  11. Pré-Condição: Criar uma página XHTML a qual utilizará o componente
  12. Passo 1: Adicionar o Namespace criado à página
  13. Passo 2: Utilizar o componente
  14. } catch(Exceptions e) {
  15. Utilização de Componentes JSF Básicos – Composite Components
  16. } finally {
  17. }

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:

XHTML
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:

Figura 01 – Estrutura de pastas de um projeto web

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.

Figura 02 – Criação da pasta sistemaAcademico

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:

XHTML
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:

XHTML
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

XHTML
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.

XHTML
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>:

XHTML
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:

XHTML
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

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:

XHTML
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:

XHTML
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>

Figura 03 – Componente em execução com a palavra Informática

Ou informando a palavra Medicina, Figura 04:

XHTML
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>

 

Figura 04 – Componente em execução com a palavra Medicina

 

} catch(Exceptions e) {

Utilização de Componentes JSF Básicos – Composite Components

***************************************************************************

Problema: Passo 1 não foi realizado

Código Exemplo:

XHTML
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:

XHTML
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:

XHTML
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!

}

Filed Under: Java, JSF Tagged With: Composite Components, Java, JSF

About Mauda

Mestre em Informática, Analista de Sistemas, Professor, SCJP e Baterista. Desde 2002 trabalhando no mundo Java e ensinando pessoas sobre desenvolvimento de sistemas. Mais informações

Reader Interactions

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Advertisements

Copyright © 2025 · Genesis Framework · WordPress · Log in