You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Paul Spencer <pa...@intekon.com> on 2014/07/01 16:29:21 UTC
Content of variable not appearing in include fragment.
Using MyFaces 2.2.3
The intent is for the contents of the <ui:define> variable page_title to appear both in the browser title bar and in the page’s content header area while using a common template across many pages. The content header area is displayed in the <body> of the page and is there to give each page a consistent look.
In the example below, “My Page1 Title” appears as the title of the page1.jsp, but not in the header content of the page.
Why does the <ui:define> variable page_title evaluate to blank/null in includes pages?
Is there a better way to accomplish the intended behavior?
***
* Page1.xhtml
***
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:body>
<ui:composition template="/template/commonLayout.xhtml">
<ui:define name=“page_title”>My Page1 Title</ui:define>
<ui:define name=“content">
<f:view transient=“true”>
<h1>Page 1</h1>
</f:view>
</ui:define>
</ui:composition>
</h:body>
</html>
***
* commonLayout.xhtml
***
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<h:outputStylesheet library="css" name="default.css" />
<h:outputStylesheet library="css" name="cssLayout.css" />
<title><ui:insert name="page_title" /></title>
</h:head>
<h:body>
<ui:debug />
<div id="page">
<div id="top">
<ui:insert name="header">
<ui:include src="/template/commonHeader.xhtml"/>
</ui:insert>
</div>
<div>
<div id="left">
<ui:insert name="menu">
<ui:include src="/template/commonMenuLeft.xhtml" />
</ui:insert>
</div>
<div id="content">
<ui:insert name="content">
<ui:include src="/template/commonContent.xhtml"/>
</ui:insert>
</div>
<ui:debug></ui:debug>
</div>
<div id="bottom">
<ui:insert name="footer">
<ui:include src="/template/commonFooter.xhtml" />
</ui:insert>
</div>
</div>
</h:body>
</html>
***
* commonHeader.xhtml
***
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets">
<body>
<ui:component>
<h1 style="text-align: center; color: black; background-color: white;">
<ui:insert name="page_title" />
</h1>
</ui:component>
</body>
</html>
Paul Spencer
Re: Content of variable not appearing in include fragment.
Posted by Paul Spencer <pa...@intekon.com>.
Leonardo,
I changed <ui:include src=“/template/commonHeader.xhtml”/> to <ui:decorate template=“/template/commonHeader.xhtml”/> and I am now seeing the desired results.
Thank you.
On Jul 1, 2014, at 1:53 PM, Leonardo Uribe <lu...@gmail.com> wrote:
> Hi
>
> Use ui:decorate instead ui:include in the parts you need an ui:define
> to be taken into account when the templates are resolved.
>
> regards,
>
> Leonardo Uribe
>
> 2014-07-01 9:29 GMT-05:00 Paul Spencer <pa...@intekon.com>:
>> Using MyFaces 2.2.3
>>
>> The intent is for the contents of the <ui:define> variable page_title to appear both in the browser title bar and in the page’s content header area while using a common template across many pages. The content header area is displayed in the <body> of the page and is there to give each page a consistent look.
>>
>> In the example below, “My Page1 Title” appears as the title of the page1.jsp, but not in the header content of the page.
>>
>> Why does the <ui:define> variable page_title evaluate to blank/null in includes pages?
>>
>> Is there a better way to accomplish the intended behavior?
>>
>>
>> ***
>> * Page1.xhtml
>> ***
>> <?xml version="1.0" encoding="UTF-8" ?>
>> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
>> <html xmlns="http://www.w3.org/1999/xhtml"
>> xmlns:f="http://java.sun.com/jsf/core"
>> xmlns:h="http://java.sun.com/jsf/html"
>> xmlns:ui="http://java.sun.com/jsf/facelets">
>> <h:body>
>> <ui:composition template="/template/commonLayout.xhtml">
>> <ui:define name=“page_title”>My Page1 Title</ui:define>
>> <ui:define name=“content">
>> <f:view transient=“true”>
>> <h1>Page 1</h1>
>> </f:view>
>> </ui:define>
>>
>> </ui:composition>
>> </h:body>
>> </html>
>>
>>
>>
>> ***
>> * commonLayout.xhtml
>> ***
>> <?xml version="1.0" encoding="UTF-8"?>
>> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
>> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
>> <html xmlns="http://www.w3.org/1999/xhtml"
>> xmlns:h="http://java.sun.com/jsf/html"
>> xmlns:ui="http://java.sun.com/jsf/facelets">
>>
>> <h:head>
>> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
>> <h:outputStylesheet library="css" name="default.css" />
>> <h:outputStylesheet library="css" name="cssLayout.css" />
>> <title><ui:insert name="page_title" /></title>
>> </h:head>
>>
>> <h:body>
>> <ui:debug />
>> <div id="page">
>> <div id="top">
>> <ui:insert name="header">
>> <ui:include src="/template/commonHeader.xhtml"/>
>> </ui:insert>
>> </div>
>> <div>
>> <div id="left">
>> <ui:insert name="menu">
>> <ui:include src="/template/commonMenuLeft.xhtml" />
>> </ui:insert>
>> </div>
>>
>> <div id="content">
>> <ui:insert name="content">
>> <ui:include src="/template/commonContent.xhtml"/>
>> </ui:insert>
>> </div>
>> <ui:debug></ui:debug>
>> </div>
>> <div id="bottom">
>> <ui:insert name="footer">
>> <ui:include src="/template/commonFooter.xhtml" />
>> </ui:insert>
>> </div>
>>
>> </div>
>> </h:body>
>> </html>
>>
>> ***
>> * commonHeader.xhtml
>> ***
>> <?xml version="1.0" encoding="UTF-8"?>
>> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
>> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
>> <html xmlns="http://www.w3.org/1999/xhtml"
>> xmlns:ui="http://java.sun.com/jsf/facelets">
>> <body>
>> <ui:component>
>> <h1 style="text-align: center; color: black; background-color: white;">
>> <ui:insert name="page_title" />
>> </h1>
>> </ui:component>
>> </body>
>> </html>
>>
>>
>> Paul Spencer
>>
Re: Content of variable not appearing in
include fragment.
Posted by Leonardo Uribe <lu...@gmail.com>.
Hi
Use ui:decorate instead ui:include in the parts you need an ui:define
to be taken into account when the templates are resolved.
regards,
Leonardo Uribe
2014-07-01 9:29 GMT-05:00 Paul Spencer <pa...@intekon.com>:
> Using MyFaces 2.2.3
>
> The intent is for the contents of the <ui:define> variable page_title to appear both in the browser title bar and in the page’s content header area while using a common template across many pages. The content header area is displayed in the <body> of the page and is there to give each page a consistent look.
>
> In the example below, “My Page1 Title” appears as the title of the page1.jsp, but not in the header content of the page.
>
> Why does the <ui:define> variable page_title evaluate to blank/null in includes pages?
>
> Is there a better way to accomplish the intended behavior?
>
>
> ***
> * Page1.xhtml
> ***
> <?xml version="1.0" encoding="UTF-8" ?>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml"
> xmlns:f="http://java.sun.com/jsf/core"
> xmlns:h="http://java.sun.com/jsf/html"
> xmlns:ui="http://java.sun.com/jsf/facelets">
> <h:body>
> <ui:composition template="/template/commonLayout.xhtml">
> <ui:define name=“page_title”>My Page1 Title</ui:define>
> <ui:define name=“content">
> <f:view transient=“true”>
> <h1>Page 1</h1>
> </f:view>
> </ui:define>
>
> </ui:composition>
> </h:body>
> </html>
>
>
>
> ***
> * commonLayout.xhtml
> ***
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml"
> xmlns:h="http://java.sun.com/jsf/html"
> xmlns:ui="http://java.sun.com/jsf/facelets">
>
> <h:head>
> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
> <h:outputStylesheet library="css" name="default.css" />
> <h:outputStylesheet library="css" name="cssLayout.css" />
> <title><ui:insert name="page_title" /></title>
> </h:head>
>
> <h:body>
> <ui:debug />
> <div id="page">
> <div id="top">
> <ui:insert name="header">
> <ui:include src="/template/commonHeader.xhtml"/>
> </ui:insert>
> </div>
> <div>
> <div id="left">
> <ui:insert name="menu">
> <ui:include src="/template/commonMenuLeft.xhtml" />
> </ui:insert>
> </div>
>
> <div id="content">
> <ui:insert name="content">
> <ui:include src="/template/commonContent.xhtml"/>
> </ui:insert>
> </div>
> <ui:debug></ui:debug>
> </div>
> <div id="bottom">
> <ui:insert name="footer">
> <ui:include src="/template/commonFooter.xhtml" />
> </ui:insert>
> </div>
>
> </div>
> </h:body>
> </html>
>
> ***
> * commonHeader.xhtml
> ***
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml"
> xmlns:ui="http://java.sun.com/jsf/facelets">
> <body>
> <ui:component>
> <h1 style="text-align: center; color: black; background-color: white;">
> <ui:insert name="page_title" />
> </h1>
> </ui:component>
> </body>
> </html>
>
>
> Paul Spencer
>