[jsr-314-open] minor feature enhancement for Facelets/VDL

David Geary clarity.training at GMAIL.COM
Mon Apr 13 15:16:12 EDT 2009


2009/4/8 Dan Allen <dan.j.allen at 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.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jsr-314-open-mirror/attachments/20090413/0753bfb0/attachment.html 


More information about the jsr-314-open-mirror mailing list