Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Facelets: how to pass a ui:insert value as an html attribute?

Tags:

jsf

facelets

I'm trying to accomplish a small tweak in a Facelets/JSF environment. I know next to nothing how all of it fits together.

I have a value defined on various pages as "title"

<ui:define name="title">PageUID_123</ui:define>

On another page I am referencing this with:

<ui:insert name="title"/>

I can wrap html tags around the insert just fine, but I need to be able to output the value of "title" as an attribute of another element. My end goal is for it to render in html like this:

<meta name="pageid" content="PageUID_123"/>

If I try putting the insert tag in the content="" bit, it throws a parsing error. Is there a way to do this?

like image 500
Geuis Avatar asked Feb 11 '09 01:02

Geuis


1 Answers

I don't have a working environment in front of me, but I believe you don't want to you use <ui:define>, but instead you want to use <ui:param> and then use ${x} or #{x} (or forget which or if it matters) to pull them out.

So, for you example you would have:

<ui:param name="title" value="PageUID_123" />

And then:

<meta name="pageid" content="${title}"/>

My only concern with that is that you are using include to have nice templates, i.e.

template:

<html>
    <head>
        <meta name="pageid" content="${title}"/>
    </head>
    <body>
        <ui:insert name="content" />
    </body>
</html>

Inner page:

<html xmlns="...so many">
    <ui:param name="title" value="PageUID_123" />
    <ui:define name="content">
        <!-- content goes here -->
    </ui:define>
</html>

And I really don't know if that will fly...

Edit: You may want to try ${title} or #{title} just for kicks the way you're doing it now, it might Just Work.

like image 136
SCdF Avatar answered Oct 11 '22 12:10

SCdF