2009/4/8 Dan Allen <dan.j.allen@gmail.com>
I just thought of a feature I have often needed in Facelets that perhaps we can weave into the VDL. It would be nice to know if a named template has been defined inside the master template. Consider the following example:

page.xhtml
<ui:composition template="/WEB-INF/template.xhtml" ...>
    <ui:param name="title" value="VDL Template Page"/>
    <ui:define name="content">
         <h:outputText value="Hello World" />
    </ui:define>
</ui:composition>

template.xhtml
<html ...>
    <h:head>
        <title>#{not empty title ? title : 'My Site'}</title>

Alternatively, you can do <ui:insert name="title">My Site</ui:insert> if you ui:define title in page.xhtml, although last time I checked, I don't believe that default values were working for ui:insert in Mojarra.


    </h:head>
    <body>
        <div id="container">
            <ui:insert name="content"/> <- how do I know if it has been defined?
        </div>
    </body>
</html>

Since the <ui:param> creates a regular variable, I can check whether it is empty or not. But I do not have a way to check if the named template "content" has been defined. Of course, I can nest default content within the <ui:insert>, which is used when the named template is not defined, but there are cases when I simply need to know whether or not 
it is defined. Could we come up with some way to check if it is defined?
 
With default values, you should be able to do this:

  <ui:insert name="content"></ui:insert>

And nothing should be inserted if content is not defined. Again, I don't know if that works in Mojarra.

However, that solution (if it works) isn't good enough because page authors should be able to conditionally render any chunk of XHTML, instead of just conditionally inserting with ui:insert. For example, the container div in the example above might have padding and a border, so if it has no content, you'll get a rectangle with a border, instead of nothing. Therefore, you want the page author to be able to conditionally render the div based on whether content has been defined.


david



-Dan

--
Dan Allen
Senior Software Engineer, Red Hat | Author of Seam in Action

http://mojavelinux.com
http://mojavelinux.com/seaminaction
http://in.relation.to/Bloggers/Dan

NOTE: While I make a strong effort to keep up with my email on a daily
basis, personal or other work matters can sometimes keep me away
from my email. If you contact me, but don't hear back for more than a week,
it is very likely that I am excessively backlogged or the message was
caught in the spam filters.  Please don't hesitate to resend a message if
you feel that it did not reach my attention.