2009/4/8 Dan Allen <dan.j.allen(a)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.