正如主题所说,所需的doctype不会在我的JSF页面中呈现。我用过的版本:
我已经尝试过捆绑的(2.2.14 / 13/15?)版本,没有变化,所以我从github(官方发布)升级到2.3.3。
在我的整个项目中,我只有一个doctype,而且在我的#34; master"模板:
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>
许多JSF页面如下所示:
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>
提到的guest_base.tpl
是实际页面和我的&#34; master&#34;之间的一层。模板:
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>
热烈欢迎任何关于如何解决这个问题的想法。 : - )
更新
稍微修正了base.tpl
。现在至少再次正确加载语言环境。 f:view
似乎也至少覆盖了h:head
,h:body
和f:loadBundle
,这是有道理的:
f:view
组件设置区域设置f:loadBundle
使用设置的区域设置关联消息包但是现在,仍然存在主要问题,doctype
仍未出现。