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
>