0

For my composite component which is packaged in JAR I've used a <cc:interface> with a simple <cc:attribute> and, of course a <cc:implementation>.

In Development stage, I've a javax.faces.view.facelets.TagException which complains about cc:interface component not detected for identifier «j_idt6.getParent()». In Production stage, it seems to work, but the value of <cc:attribute> doesn't show as expected.

I've seen on the web a JIRA issue JAVASERVERFACES-1903, but it seems a bit old. Does anybody have a clue how to resolve it? Do you think that this issue will be solved one day? How do you deals with composite components in JAR files with your projects?

My config is Mojarra 2.1.4 under Glassfish 3.1.


Update from OP post, below:

Here is the error:

/file:/D:/Users/simplicity2k/Documents/NetBeansProjects/tmp/application/application-ear/target/gfdeploy/org.simplicity2k_application-ear_ear_1.0-SNAPSHOT/application-web-1.0-SNAPSHOT_war/WEB-INF/lib/components-1.0-SNAPSHOT.jar!/META-INF/resources/components/sampleOutput.xhtml @8,23 <cc:interface> Composant non détecté pour l’identificateur «j_idt6.getParent()».

And the stacktrace :

javax.faces.view.facelets.TagException: /file:/D:/Users/simplicity2k/Documents/NetBeansProjects/tmp/application/application-ear/target/gfdeploy/org.simplicity2k_application-ear_ear_1.0-SNAPSHOT/application-web-1.0-SNAPSHOT_war/WEB-INF/lib/components-1.0-SNAPSHOT.jar!/META-INF/resources/components/sampleOutput.xhtml @8,23 <cc:interface> Composant non détecté pour l’identificateur «j_idt6.getParent()».
at com.sun.faces.facelets.tag.composite.InterfaceHandler.validateComponent(InterfaceHandler.java:135)
at com.sun.faces.facelets.tag.composite.InterfaceHandler.apply(InterfaceHandler.java:125)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93)
at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:86)
at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:308)
at com.sun.faces.facelets.impl.DefaultFacelet.include(DefaultFacelet.java:367)
at com.sun.faces.facelets.impl.DefaultFaceletContext.includeFacelet(DefaultFaceletContext.java:326)
at com.sun.faces.facelets.tag.UserTagHandler.apply(UserTagHandler.java:142)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
at javax.faces.view.facelets.DelegatingMetaTagHandler.applyNextHandler(DelegatingMetaTagHandler.java:137)
at com.sun.faces.facelets.tag.jsf.ComponentTagHandlerDelegateImpl.apply(ComponentTagHandlerDelegateImpl.java:184)
at javax.faces.view.facelets.DelegatingMetaTagHandler.apply(DelegatingMetaTagHandler.java:120)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
at com.sun.faces.facelets.compiler.NamespaceHandler.apply(NamespaceHandler.java:93)
at javax.faces.view.facelets.CompositeFaceletHandler.apply(CompositeFaceletHandler.java:98)
at com.sun.faces.facelets.compiler.EncodingHandler.apply(EncodingHandler.java:86)
at com.sun.faces.facelets.impl.DefaultFacelet.apply(DefaultFacelet.java:152)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.buildView(FaceletViewHandlingStrategy.java:769)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:100)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:722)

The files in my JAR :

META-INF/resources/components/sampleOutput.xhtml

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:cc="http://java.sun.com/jsf/composite">

    <!-- INTERFACE -->
    <cc:interface>
        <cc:attribute name="colorRed" default="F00" />
    </cc:interface>

    <!-- IMPLEMENTATION -->
    <cc:implementation>
        <h:panelGroup layout="block" styleClass="componentContainer" style="border:1px solid \##{cc.attrs.colorRed};">
            <h:outputText value="Sample Output Component #{cc.attrs.colorRed}" />
        </h:panelGroup>
    </cc:implementation>

</html>

And the META-INF/components.taglib.xml

<facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xmlns:composite="http://java.sun.com/jsf/composite"
              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
              version="2.0">

    <namespace>http://simplicity2k.org/components</namespace>
    <composite-library-name>components</composite-library-name>
    <tag>
        <tag-name>sampleOutput</tag-name>
        <source>resources/components/sampleOutput.xhtml</source>
    </tag>

</facelet-taglib>
Brock Adams
  • 82,642
  • 19
  • 207
  • 268
simplicity4k
  • 31
  • 1
  • 4
  • I don't recognize the error as one of Mojarra. Please copypaste the original exception message and stacktrace and do not rephrase it. – BalusC Nov 29 '11 at 22:44

2 Answers2

1

You shouldn't have the need for a taglib.xml file at all. Remove it and reference your composites in the views by the following namespace:

xmlns:ec="http://java.sun.com/jsf/composite/components"

The "/components" part refers to the folder "/components" which you have there in the resources folder.

See also:

Community
  • 1
  • 1
BalusC
  • 992,635
  • 352
  • 3,478
  • 3,452
0

Ok solved. Error was in namespaces, and use of cc:xxx instead of composite:xxx

    <?xml version="1.0"?>
    <facelet-taglib xmlns="http://java.sun.com/xml/ns/javaee"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns:composite="http://java.sun.com/jsf/composite"
                  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
                  version="2.0">

        <namespace>http://java.sun.com/jsf/composite</namespace>

        <tag>
            <tag-name>sampleExternalComponent</tag-name>
            <source>resources/ec/sampleExternalComponent.xhtml</source>
        </tag>

    </facelet-taglib>

Component :

<?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:composite="http://java.sun.com/jsf/composite"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:ui="http://java.sun.com/jsf/facelets">

    <ui:composition>
        <!-- INTERFACE -->
        <composite:interface>
            <composite:attribute name="color" default="000000" required="false" />
        </composite:interface>

        <!-- IMPLEMENTATION -->
        <composite:implementation>
            <h:outputText value="#{sampleExternalComponentBean} || #{sampleExternalComponentBean.name} || #{cc.id} || #{cc.attrs.color}" style="color: \##{cc.attrs.color};" />
        </composite:implementation>
    </ui:composition>
</html>

And to call it in WAR : xmlns:ec="http://java.sun.com/jsf/composite/ec" and <ec:sampleExternalComponent id="ext" color="00F" />

Greetings

simplicity4k
  • 31
  • 1
  • 4