krokodilko
krokodilko

Reputation: 36087

ui:include includes wrong file in JSF 2.2

Accorrding to the documentation of ui:include tag

Use this tag—which is very similar to JSP's jsp:include—to encapsulate and reuse content among multiple XHTML pages. There are three things this tag can include: plain XHTML, and XHTML pages that have either a composition tag or a component tag.

You supply a filename, through ui:include's src attribute for JSF to include. That filename is relative to the XHTML file that was rendered as a result of the last request. So, for example, if JSF loaded the view login.xhtml, and that file included pageDecorations/header.xhtml, and pageDecorations/header.xhtml included companyLogo.xhtml, then companyLogo.xhtml will not be found if it's in the pageDecorations directory, because companyLogo.xhtml has to be in the same directory as login.xhtml.


I created a simple test:
webapp/login.xhtml

<!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"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html">

<h:body>

    <ui:include src="pageDecorations/header.xhtml" />

</h:body>
</html>

webapp/pageDecorations/header.xhtml

<ui:include 
        src="logo.xhtml"

        xmlns="http://www.w3.org/1999/xhtml"
        xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
/>

webapp/pageDecorations/logo.xhtml

<h:outputText 
      value="Logo in /pageDecorations" 
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
/>

webapp/logo.xhtml

<h:outputText value="Logo in /" 
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"

/>

When I ran this test (loaded login.xhtml page) using JSF 2.2 on WildFly 10.1 , I got Logo in /pageDecorations, while according to the documentation it should be: Logo in /

What is wrong ? Is there a bug in the documentation or Mojarra implementation ?
Or my understanding is wrong ?

Upvotes: 2

Views: 291

Answers (1)

nilesh virkar
nilesh virkar

Reputation: 459

First, you are inside webapp/ and executing webapp/login.xhtml inside that you get src="pageDecorations/header.xhtml" and for exectuing that you are in pageDecorations and from header.xhtml you are tring to find src="logo.xhtml" which will you get in the same directory (pageDecorations) so it will print "Logo in /pageDecorations" . Document looks wrong in this case.

Upvotes: 1

Related Questions