Doctype not showing in JSF master template

As the subject said, the desired doctype is not displayed on my JSF pages. My used versions:

  • Payara server Payara server 4.1.2.181 #badassfish (build 220)]]
  • Mojarra 2.3.3 (20171008-2230 673408fa9199477d87f44521ff873d709128c88b)
  • PrimeFaces 6.2 ("official" version)

I already tried the version (2.2.14 / 13/15?), Without any changes, so I updated to 2.3.3 from github (official release).

In my entire project, I have only one type of doctype, which is in my "master" template:

base.tpl :

 <?xml version="1.0" encoding="UTF-8" ?> <ui:composition 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://xmlns.jcp.org/jsf/facelets" xmlns:p="http://primefaces.org/ui" xmlns:pm="http://primefaces.org/mobile"> <h:doctype rootElement="html" public="-//W3C//DTD XHTML 1.0 Transitional//EN" system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/> <html lang="#{localizationController.locale.language}" xml:lang="#{localizationController.locale.language}" xmlns="http://www.w3.org/1999/xhtml"> <f:view locale="#{localizationController.locale}" contentType="text/html" /> <h:head> <f:facet name="first"> <ui:insert name="metadata" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0"/> <meta name="apple-mobile-web-app-capable" content="yes" /> </f:facet> <f:loadBundle var="msg" basename="org.mxchange.localization.generic" /> <f:loadBundle var="project" basename="org.mxchange.localization.project" /> <f:loadBundle var="local" basename="org.mxchange.localization.local" /> <h:outputStylesheet name="/css/custom.css" /> <title> <h:outputText value="#{initParam['project_title']} - " /> <ui:insert name="document_title"> <h:outputText value="Default document title" /> </ui:insert> </title> </h:head> <h:body> <pm:page id="master"> <h:panelGroup styleClass="ui-fluid" layout="block"> <pm:header> <h:panelGroup layout="block"> <h:panelGroup styleClass="page-header" layout="block"> <h1> <h:outputText value="#{initParam['project_title']} - " /> <ui:insert name="content_header"> <h:outputText value="Default header title" /> </ui:insert> </h1> </h:panelGroup> <h:panelGroup styleClass="page-content-gap" layout="block"> </h:panelGroup> </h:panelGroup> </pm:header> <h:panelGroup styleClass="ui-g" layout="block"> <h:panelGroup styleClass="ui-g-12 ui-md-2" layout="block"> <ui:insert name="menu"> <h:outputText value="Default menu" /> </ui:insert> <ui:include src="/WEB-INF/templates/widgets/locale_change_widget.tpl" /> </h:panelGroup> <h:panelGroup styleClass="ui-g-12 ui-md-10 ui-g-nopad" layout="block"> <h:panelGroup styleClass="ui-g-12 ui-g-nopad"> <ui:insert name="content"> <h:outputText value="Default content" /> </ui:insert> </h:panelGroup> </h:panelGroup> <h:panelGroup styleClass="ui-g-12 page-footer" layout="block"> <ui:insert name="footer"> <h:outputText value="Default footer" /> </ui:insert> </h:panelGroup> </h:panelGroup> <h:panelGroup styleClass="error-container" layout="block"> <p:growl showDetail="true" sticky="true"> <p:autoUpdate /> </p:growl> <p:ajaxExceptionHandler type="javax.faces.application.ViewExpiredException" update="exceptionDialog" onexception="PF('exceptionDialog').show();" /> <p:dialog id="exceptionDialog" closable="true" closeOnEscape="true" header="Exception '#{pfExceptionHandler.type}' occured!" widgetVar="exceptionDialog" height="500px"> <div class="para"> <h:outputText value="#{msg.EXCEPTION_MESSAGE}:" /> <h:outputText value="#{pfExceptionHandler.message}" /> </div> <div class="para"> <h:outputText value="#{msg.EXCEPTION_STACK_TRACE}:" /> <h:outputText value="#{pfExceptionHandler.formattedStackTrace}" escape="false" /> </div> <div class="para"> <p:button onclick="window.location.href = document.location.href;" value="#{msg.RELOAD_PAGE}" rendered="#{pfExceptionHandler.type == 'javax.faces.application.ViewExpiredException'}" /> </div> </p:dialog> </h:panelGroup> </h:panelGroup> </pm:page> </h:body> </html> </ui:composition> 

Many JSF pages look like this:

some_guest_page.xhtml :

 <?xml version="1.0" encoding="UTF-8" ?> <ui:composition template="/WEB-INF/templates/guest/guest_base.tpl" xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core"> <ui:define name="guest_title"> <h:outputText value="#{msg.PAGE_TITLE_INDEX_FOO}" /> </ui:define> <ui:define name="content_header"> <h:outputText value="#{msg.CONTENT_TITLE_INDEX_FOO}" /> </ui:define> <ui:define name="content"> <!-- @TODO Here goes your content. //--> </ui:define> </ui:composition> 

The specified guest_base.tpl is the layer between the actual page and my "main" template:

guest_base.tpl :

 <?xml version="1.0" encoding="UTF-8" ?> <ui:composition template="/WEB-INF/templates/base.tpl" xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:h="http://xmlns.jcp.org/jsf/html"> <ui:define name="document_title"> <ui:insert name="document_guest_title"> <h:outputText value="Default guest title" /> </ui:insert> </ui:define> <ui:define name="menu"> <ui:fragment rendered="#{featureController.isFeatureEnabled('guest_menu')}"> <ui:include src="/WEB-INF/templates/guest/guest_menu.tpl" /> </ui:fragment> </ui:define> <ui:define name="footer"> <ui:include src="/WEB-INF/templates/guest/guest_footer.tpl" /> </ui:define> </ui:composition> 

Any ideas on how to fix this are welcome. :-)

UPDATE: Fixed base.tpl . Now at least the language is loading correctly again. f:view apparently also covers at least h:head , h:body and f:loadBundle , which makes sense:

  • Component
  • f:view sets the locale
  • f:loadBundle loads with a set of related packages related to the language,

But now the main problem still remains, no doctype .

+1
source share

All Articles