doctype 未在 JSF“主”模板中呈现

2023-12-26

正如主题所说,所需的文档类型未在我的 JSF 页面中呈现。我使用的版本:

  • Payara 服务器 Payara 服务器 4.1.2.181 #badassfish (build 220)]]
  • 莫贾拉 2.3.3 (20171008-2230 673408fa9199477d87f44521ff873d709128c88b)
  • PrimeFaces 6.2(“官方”版本)

我已经尝试过捆绑的(2.2.14/13/15?)版本,没有变化,所以我从github(官方发布)升级到2.3.3。

在我的整个项目中,我只有一个文档类型,它位于我的“主”模板中:

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是实际页面和我的“主”模板之间的一层:

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>

热烈欢迎任何有关如何解决此问题的想法。 :-)

UPDATE: Fixed base.tpl轻微地。现在至少语言环境已再次正确加载。f:view似乎还至少涵盖了h:head, h:body and f:loadBundle这是有道理的:

  • f:view组件设置区域设置
  • f:loadBundle加载与设置的语言环境相关的消息包

但现在,最大的问题仍然是,不doctype,仍然存在。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

doctype 未在 JSF“主”模板中呈现 的相关文章

随机推荐