简体   繁体   中英

JSF mojarra with primefaces migration from Glassfish to Wildfly - CSS and theme not loading

We are migrating our App from glassfish to wildfly. However, the primefaces theme no longer loads. I am attaching the pages which are loaded .

Firebug console shows an error - ReferenceError: $ is not defined

Index.xhtml `

<?xml version="1.0" encoding="UTF-8"?>
<!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: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"
>
    <h:head>           
        <link rel="shortcut icon"
              href="http://www.hs-furtwangen.de/fileadmin/templates/favicon.ico"
              type="image/x-ico; charset=binary" />
        <f:facet name="first">
            <meta content='text/html; charset=UTF-8' http-equiv="Content-Type" />
            <title>#{messages.finquasCompleteName}</title>
        </f:facet>                    
    </h:head>
    <h:body>
        <ui:composition template="./mainTemplate.xhtml">
            <ui:define name="NonServiceView">
                <h:form>
                    <p:growl autoUpdate="true" />

                    <div class="activitySream">
                        <div class="activityStreamHeader">
                            #{messages.activityStream}
                        </div>
                        <p:outputPanel deferred="true">
                            <p:dataList id="id_list_activity_stream"
                                        value="#{activityStreamController.logEntries}" var="logEntry"
                                        type="none" emptyMessage="#{messages.noActivitiesFound}">  
                                <div class="activityDescriptionArea">
                                    <div class="activityIconArea">
                                        <h:outputText value="#{activityStreamController.getActionSpecificIconCode(logEntry.changeType)}"
                                                      escape="false" />
                                    </div>
                                    <div class="activityDescription">
                                        <h:outputText value="#{logEntry.creator.name}" styleClass="boldLabel" />
                                        <h:outputText value="#{activityStreamController.getActivityTextFirstPartForLogEntry(logEntry)}" />
                                        <h:commandLink styleClass="boldLabel"
                                                       action="#{activityStreamController.navigateToEntity(logEntry.abstractEntity)}">
                                            #{activityStreamController.getEnitityText(logEntry.abstractEntity)} 
                                        </h:commandLink>
                                        <h:outputText value="#{activityStreamController.getChangeLogLabelOfLogEntry(logEntry)}." />
                                        <div class="activityDate">
                                            <h:outputText value="#{logEntry.changeDate}">
                                                <f:convertDateTime pattern="dd.MM.yyyy HH:mm:ss" timeZone="Europe/Berlin" />
                                            </h:outputText> 
                                        </div>
                                    </div>
                                </div>
                            </p:dataList>  
                            <p:commandButton value="#{messages.showMore}" action="#{activityStreamController.showMore()}" 
                                             update="id_list_activity_stream"
                                             rendered="#{not empty activityStreamController.logEntries}"
                                             styleClass="plainText greenButton showMoreActivitiesButton"/>

                        </p:outputPanel>
                    </div>
                </h:form>
            </ui:define>            
        </ui:composition>    
    </h:body>
</html>`

mainTemplate.xhtml

`

 <?xml version="1.0" encoding="UTF-8"?>
<!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: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"
>

<h:body>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
                xmlns:h="http://xmlns.jcp.org/jsf/html"
                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
                xmlns:p="http://primefaces.org/ui">
    <ui:composition template="./headerFooterLoggedInPagesTemplate.xhtml">
        <ui:define name="leftHeaderUnit">
            <p:commandButton
                id="id_btn_home"
                action="#{navigationController.navigateHome()}"
                value="#{iconSetController.home}"
                escape="false" title="#{messages.home}"
                update=":structureTreeForm" ajax="false" />
        </ui:define>

        <ui:define name="rightHeaderUnit">
            <p:commandButton id="id_btn_main_user_profile"
                             action="userProfile"
                             title="#{messages.myProfile}" 
                             value="#{iconSetController.user}"
                             ajax="false"
                             escape="false" />
            <p:commandButton id="id_btn_main_help"
                             action="help"
                             title="#{messages.help}" 
                             value="#{iconSetController.help}"
                             escape="false" />
            <p:commandButton id="id_btn_main_logout"
                             title="#{messages.logout}"
                             value="#{iconSetController.logout}"
                             escape="false"
                             action="#{navigationController.logout()}" />
        </ui:define>

        <!--The empty header field is a necessary in order to display the collapsible button-->
        <ui:define name="navigationArea">     
            <p:layoutUnit position="west" 
                          collapsible="true"
                          header=""
                          effect="none"
                          resizable="true" id="id_lu_navigationBarLeft" size="320" minSize="300">         
                <p:tabView id="id_tabView_navigationBar" 
                           dynamic="true"
                           activeIndex="#{navigationController.activeNavigationBarTabIndex}"
                           styleClass="finquasTabs">
                    <p:ajax event="tabChange" listener="#{navigationController.onNavigationBarTabChange}" />  
                    <p:tab title="#{messages.myServicesTab}">
                        <p:panel rendered="#{not empty navigationController.administrationServicesOfCurrentUser}" header="#{messages.myAdministrationServices}">
                            <h:form id="myAdministrationServicesForm">
                                <p:dataList id="id_list_my_administration_services"
                                            value="#{navigationController.administrationServicesOfCurrentUser}"
                                            var="service"
                                            rendered="#{not empty navigationController.administrationServicesOfCurrentUser}">
                                    <p:column>
                                        <h:commandLink
                                            action="#{navigationController.viewServiceViaObject(service)}">
                                            #{service.name} 
                                        </h:commandLink>
                                    </p:column>
                                </p:dataList>
                            </h:form>
                        </p:panel>
                        <p:panel rendered="#{not empty navigationController.educationalServicesOfCurrentUser}" header="#{messages.myEducationalServices}">
                            <h:form id="myEducationalServicesForm">
                                <p:dataList id="id_list_my_product_services"
                                            value="#{navigationController.educationalServicesOfCurrentUser}"
                                            var="service"
                                            rendered="#{not empty navigationController.educationalServicesOfCurrentUser}">
                                    <p:column>
                                        <h:commandLink
                                            action="#{navigationController.viewServiceViaObject(service)}">                                            
                                            <h:outputText value="#{service.name}" />                                                                                   
                                            <h:outputText value=" #{messages[service.getDegree().getAbbreviation()]}#{messages[service.getDegreeType().getAbbreviation()]}" rendered="#{navigationController.isDegreeProgram(service)}"/>                                                                                      
                                            <h:outputText value=" #{navigationController.getStateOfService(service)}" rendered="#{navigationController.isServiceDegreeProgramOrStudyModule(service)}"/>                                                                                      
                                        </h:commandLink>
                                    </p:column>
                                </p:dataList>
                            </h:form>
                        </p:panel>
                        <p:panel rendered="#{not empty navigationController.peerReviewsOfCurrentUser}" header="#{messages.myPeerReviews}">
                            <h:form id="myPeerReviewsForm">
                                <p:dataList id="id_list_my_review_services"
                                            value="#{navigationController.peerReviewsOfCurrentUser}"
                                            var="service"
                                            rendered="#{not empty navigationController.peerReviewsOfCurrentUser}">
                                    <p:column>
                                        <h:commandLink
                                            action="#{navigationController.viewServiceViaObject(service)}">
                                            #{service.name} (#{messages[service.state.class.name]})
                                        </h:commandLink>
                                    </p:column>
                                </p:dataList>
                            </h:form>
                        </p:panel>
                        <p:panel rendered="#{not empty navigationController.qualityReportServicesOfCurrentUser}" header="#{messages.myQualityReportServices}">
                            <h:form id="myQualityReportServicesForm">
                                <p:tree id="id_list_my_quality_report_services"
                                        value="#{navigationController.qualityReportServiceRoot}"
                                        var="serviceNode"
                                        dynamic="true"
                                        rendered="#{not empty navigationController.qualityReportServicesOfCurrentUser}">
                                    <p:ajax event="expand" listener="#{navigationController.onNodeExpandQualityReportGraph}" />
                                    <p:ajax event="collapse" listener="#{navigationController.onNodeCollapse}" />
                                    <p:treeNode>
                                        <h:commandLink
                                            action="#{navigationController.viewServiceViaObject(serviceNode)}">                                                                                         
                                            <span title="#{messages.qualityReportFinished}"><h:panelGroup layout="block" class="greenCircle" rendered="#{serviceNode.state.position == 3}"/> </span>
                                            <span title="#{messages.qualityReportWaitingForStatement}"><h:panelGroup layout="block" class="yellowCircle" rendered="#{serviceNode.state.position == 2}"/></span> 
                                            <span title="#{messages.qualityReportWaitingForStatementStudyDean}"><h:panelGroup layout="block" class="redCircle" rendered="#{serviceNode.state.position == 1}"/></span> 
                                            #{serviceNode.simpleName}                                            
                                        </h:commandLink>
                                    </p:treeNode>
                                </p:tree>                                
                            </h:form>
                        </p:panel>
                    </p:tab>
                    <p:tab title="#{messages.serviceStructureTab}">
                        <p:panel header="#{messages.search}" styleClass="finquasinput">
                            <h:form id="id_form_main_search">
                                <p:autoComplete id="id_input_main_search"
                                                forceSelection="true"
                                                placeholder="#{messages.autoCompleteHint}"
                                                value="#{navigationController.serviceName}" 
                                                effect="fade"
                                                required="true"
                                                requiredMessage="#{messages.noServiceFound}"
                                                styleClass="autocompleteService"                                                
                                                completeMethod="#{navigationController.completeService}" />
                                <p:commandButton id="id_btn_main_search"
                                                 value="#{iconSetController.search}" escape="false"                                                 
                                                 action="#{navigationController.viewServiceViaAutoComplete}"
                                                 ajax="false" />
                            </h:form>
                        </p:panel>
                        <p:panel header="#{messages.structure}">
                            <h:form id="structureTreeForm">
                                <p:tree value="#{navigationController.serviceRoot}"
                                        dynamic="true"
                                        var="serviceNode" 
                                        styleClass="finquastree" 
                                        animate="true">
                                    <p:ajax event="expand" listener="#{navigationController.onNodeExpandEducationalServiceGraph}" />
                                    <p:ajax event="collapse" listener="#{navigationController.onNodeCollapse}" />
                                    <p:treeNode>
                                        <h:commandLink
                                            action="#{navigationController.viewServiceViaObject(serviceNode)}">
                                            <h:outputText value="#{serviceNode.name} #{messages[serviceNode.getDegree().getAbbreviation()]}#{messages[serviceNode.getDegreeType().getAbbreviation()]}" rendered="#{serviceNode['class'].simpleName == 'DegreeProgram'}"/>                                                                                   
                                            <h:outputText value="#{serviceNode.name}" rendered="#{serviceNode['class'].simpleName != 'DegreeProgram'}"/>                                                                                   
                                        </h:commandLink>
                                    </p:treeNode>
                                </p:tree>
                            </h:form>
                        </p:panel>
                    </p:tab>
                </p:tabView>
            </p:layoutUnit>
        </ui:define>  
    </ui:composition>
</ui:composition>
</h:body>

</html>`

headerFooterTemplate.xhtml

`

 <?xml version="1.0" encoding="UTF-8"?>
    <!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: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"
    >

    <h:body>
    <ui:composition 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"
          xmlns:p="http://primefaces.org/ui">

        <f:view contentType="text/html">
                <ui:insert name="loggedInCheck" />  

                <f:facet name="last">
                    <h:outputStylesheet library="css" name="default.css" />
                    <h:outputScript library="scripts" name="primefacesLocalization.js"
                                    target="head" />
                </f:facet>
                <p:layout fullPage="true">
                    <p:layoutUnit id="id_lu_headerUnit" position="north">
                        <h:form id="id_form_headerForm">
                            <p:toolbar styleClass="finquasheader">
                                <p:toolbarGroup styleClass="headerBar">
                                    <ui:insert name="leftHeaderUnit" /> 
                                </p:toolbarGroup>
                                <p:toolbarGroup align="right" styleClass="headerBar">       
                                    <ui:insert name="rightHeaderUnit" /> 
                                </p:toolbarGroup>
                            </p:toolbar>
                        </h:form>
                    </p:layoutUnit>
                    <ui:insert name="navigationArea" /> 

                    <p:layoutUnit id="id_lu_centerUnit" position="center">                         
                        <div id="contentArea">
                            <div class="nonServiceView">
                                <ui:insert name="NonServiceView" />  
                            </div>
                            <ui:insert name="ServiceView" />
                        </div>
                    </p:layoutUnit>

                    <p:layoutUnit position="south" id="footerUnit">
                        <h:form>
                            <p:toolbar styleClass="finquasfooter">
                                <p:toolbarGroup>
                                    <ui:insert name="leftFooterContent" />  
                                </p:toolbarGroup>
                                <p:toolbarGroup align="right" styleClass="footerToolbar">
                                    #{messages.finquasCompleteName}
                                </p:toolbarGroup>
                            </p:toolbar>
                        </h:form>
                    </p:layoutUnit>
                </p:layout>            
        </f:view>
    </ui:composition>
    </h:body>
    </html>`

headerFooterLoggedInPagesTemplate.xhtml

  `  <?xml version="1.0" encoding="UTF-8"?>
<!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: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"
>

<h:body>
<ui:composition template="./headerFooterTemplate.xhtml"
                xmlns="http://www.w3.org/1999/xhtml"
                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
                xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">
    <ui:param name="currentUser" value="#{sessionController.currentUser}" />
    <ui:define name="loggedInCheck">
        <c:if test="#{!sessionController.loggedIn}">
            <meta HTTP-EQUIV="REFRESH"
                  content="0;URL='#{navigationController.serverUrl}'" />        
        </c:if>        
    </ui:define>
    <ui:define name="leftFooterContent">
        #{currentUser.firstName} #{currentUser.lastName}
        <script>
            (function(i, s, o, g, r, a, m) {
                i['GoogleAnalyticsObject'] = r;
                i[r] = i[r] || function() {
                    (i[r].q = i[r].q || []).push(arguments)
                }, i[r].l = 1 * new Date();
                a = s.createElement(o),
                        m = s.getElementsByTagName(o)[0];
                a.async = 1;
                a.src = g;
                m.parentNode.insertBefore(a, m)
            })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');

            ga('create', 'UA-49887094-1', 'hs-furtwangen.de');
            ga('send', 'pageview');

        </script>
    </ui:define>
</ui:composition>
</h:body>
</html>`

I got the error. All my template pages were using composition and each had its own head tag. While this worked with glassfish, wildfly did not allow it. Removing head from all but the base template and making the base template not a composition solved this

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM