Problem including another XHTML page in an XHTML page

318 Views Asked by At

I am a beginner programming Java and I am doing a project using primefaces. I want to include another XHTML page in an XHTML page. The include page is in /WEB-INF/facelets/include.xhtml (It has some data from a Managed Bean)

In my "page.xhtml", at first, I put this line inside <ui:define name="content">:

<ui:include src="WEB-INF/facelets/include.xhtml" /> 

But, it does not work.

Later, I tried to do this inside <ui:define name="content">

<ui:include src="WEB-INF/facelets/include.xhtml">
    <ui:param name="fullName" value="#{identityInformationBean.fullName}" />
</ui:include>

And in the "include.xhtml":

<h:outputText
    rendered="#{fullName!=null}"
    value="#{fullName}" />

But, it does not work too. Nevertheless, if I do this:

On "page.xhtml"

<ui:include src="WEB-INF/facelets/include.xhtml">
    <ui:param name="fullName" value="Helen" />
</ui:include>

The "include.xhtml" receives the information correctly.

I'd tried to registering the include file as a tagfile, as suggest here How to include another XHTML in XHTML using JSF 2.0 Facelets? But, it does not work.

Any idea to solve this problem? Thanks!

This is a piece of code from "include.xhtml":

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:c="http://java.sun.com/jstl/core"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui">

    <h:outputText
        rendered="#{identityInformationBean.fullName!=null}"
        value="#{identityInformationBean.fullName}" />
        
</ui:composition>

This is a piece of code from "page.xhtml":

<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<ui:composition xmlns="http://www.w3.org/1999/xhtml"
    xmlns:c="http://java.sun.com/jstl/core"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui" template="templates/generaltemplate.xhtml">

    <ui:define name="content">
    
        <h2>
            <h:outputText value="Identity Information"/>
        </h2>
        
    </ui:define>

</ui:composition>

1

There are 1 best solutions below

12
Tom T On

I'm not sure why you need ui:param. Think of the include file as just saving you the trouble of typing that included code into all the pages that might use it. You don't need to pass it a parameter.

What about using a single line of code: <ui:include src="WEB-INF/facelets/include.xhtml"/> And the include file would have <h:outputText value="#{identityInformationBean.fullName}"/>