Skip to main content

JSF Tip #49 - A nested composite component

Posted by mriem on December 2, 2013 at 12:27 PM PST

Ever wondered how you would use a composite component within a composite component? Or is it not possible? It most certainly is possible, so lets see how!

First we define level 2 (the deepest nesting)

<?xml version='1.0' encoding='UTF-8' ?>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:cc="http://java.sun.com/jsf/composite">
    <head>
        <title></title>
    </head>
    <body>
        <cc:interface></cc:interface>
        <cc:implementation>
            This is coming from a nested composite component! Hurray :)
        </cc:implementation>
    </body>
</html>

Then we define level 1 (as you normally would, but now you will use a composite component within this composite component)

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:cc="http://java.sun.com/jsf/composite"
      xmlns:mypanel="http://java.sun.com/jsf/composite/mypanel">
    <head>
        <title></title>
    </head>
    <body>
        <cc:interface></cc:interface>
        <cc:implementation>
            <mypanel:mypanel/>
        </cc:implementation>
    </body>
</html>

And then the page where we use the nested composite component

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:mypanel="http://java.sun.com/jsf/composite/mypanel">
    <h:head>
        <title>Composite component</title>
    </h:head>
    <h:body>
        <h2>Composite component</h2>
        <mypanel:nested/>
    </h:body>
</html>

Note the code for this sample is available as part of the Glassfish samples (see the subversion repository at https://svn.java.net/svn/glassfish-samples~svn/trunk/ws/javaee7/jsf/nestedCompositeComponent/)

And that is it.

Enjoy!

Related Topics >>