Ошибки при откладывании простых лиц javascripts и css

Я пытался отложить файлы javascript, такие как ответ @BalusC.

Я использую Primefaces 5.3 и Omnifaces 1.8. Я пытался использовать Omnifaces 2.3, но выдает ошибку.

Я сделал все, что упомянуто в этих двух вопросах Defer загрузка и анализ файлов JavaScript PrimeFaces и Как отложить сценарии PrimeFaces.settings и проверки на стороне клиента с помощью o:deferredScript

Используемый скрипт

DeferredPrimeFaces = function() {
    var deferredPrimeFaces = {};
    var calls = [];
    var settings = {};
    var primeFacesLoaded = !!window.PrimeFaces;

    function defer(name, args) {
        calls.push({ name: name, args: args });
    }

    deferredPrimeFaces.begin = function() {
        if (!primeFacesLoaded) {
            settings = window.PrimeFaces.settings;
            delete window.PrimeFaces;
        }
    };

    deferredPrimeFaces.apply = function() {
        if (window.PrimeFaces) {
            for (var i = 0; i < calls.length; i++) {
                window.PrimeFaces[calls[i].name].apply(window.PrimeFaces, calls[i].args);
            }

            window.PrimeFaces.settings = settings;
        }

        delete window.DeferredPrimeFaces;
    };

    if (!primeFacesLoaded) {
        window.PrimeFaces = {
            ab: function() { defer("ab", arguments); },
            cw: function() { defer("cw", arguments); },
            focus: function() { defer("focus", arguments); },
            settings: {}
        };
    }

    return deferredPrimeFaces;
}();

Я создаю HeadRenderer

package com.example;

import java.io.IOException;

import javax.faces.application.ResourceDependencies;
import javax.faces.application.ResourceDependency;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.render.Renderer;

    @ResourceDependencies({
    @ResourceDependency(library="primefaces", name="primefaces.css"),
    @ResourceDependency(library="primefaces", name="primefaces.js"), // Only necessary when at least one validation JS files needs to be included.
    @ResourceDependency(library="primefaces", name="validation/validation.js"), // Only necessary when you need <p:clientValidator>.
    @ResourceDependency(library="primefaces", name="validation/beanvalidation.js") // Only necessary when you use JSR303 bean validation.
})
public class HeadRenderer extends Renderer {

    @Override
    public void encodeBegin(FacesContext context, UIComponent component) throws IOException {
        context.getResponseWriter().startElement("head", component);
    }

    @Override
    public void encodeChildren(FacesContext context, UIComponent component) throws IOException {
        // NOOP.
    }

    @Override
    public void encodeEnd(FacesContext context, UIComponent component) throws IOException {
        for (UIComponent resource : context.getViewRoot().getComponentResources(context, "head")) {
            resource.encodeAll(context);
        }

        context.getResponseWriter().endElement("head");
    }

}

и зарегистрируйте его в Faces.config.xml

<render-kit>
    <renderer>
        <component-family>javax.faces.Output</component-family>
        <renderer-type>javax.faces.Head</renderer-type>
        <renderer-class>com.example.HeadRenderer</renderer-class>
    </renderer>
</render-kit>

Заказ библиотек простых лиц

<link type="text/css" rel="stylesheet" href="/javax.faces.resource/primefaces.css.xhtml?ln=primefaces&amp;v=5.3">

<script async="" src="//www.google-analytics.com/analytics.js"></script>

<script type="text/javascript" src="/javax.faces.resource/jquery/jquery.js.xhtml?ln=primefaces&amp;v=5.3"></script>

<script type="text/javascript" src="/javax.faces.resource/primefaces.js.xhtml?ln=primefaces&amp;v=5.3"></script><script type="text/javascript" src="/javax.faces.resource/jquery/jquery-plugins.js.xhtml?ln=primefaces&amp;v=5.3"></script>

<link type="text/css" rel="stylesheet" href="/javax.faces.resource/watermark/watermark.css.xhtml?ln=primefaces&amp;v=5.3">

<script type="text/javascript" src="/javax.faces.resource/watermark/watermark.js.xhtml?ln=primefaces&amp;v=5.3"></script>

<script type="text/javascript">if(window.PrimeFaces){}</script> 

Мой файл xhtml

<h:head>
 <h:outputScript name="js/primefaces.deferred.js" target="head"/>
 <o:deferredScript library="primefaces" name="primefaces.js" onbegin="DeferredPrimeFaces.begin()" />
 <o:deferredScript library="primefaces" name="jquery/jquery-plugins.js"/>
 <o:deferredScript library="primefaces" name="watermark/watermark.js" onsuccess="DeferredPrimeFaces.apply()"/>  

Ошибка, которая отображается на консоли, и я помещаю предупреждения в функцию javacript, она входит в Primefaces.deferred.js. Функции запуска и применения запускаются после возникновения ошибок:

primefaces.js.xhtml?ln=primefaces&v=5.3:2Uncaught ReferenceError: $ is not definedresolveUserAgent @ primefaces.js.xhtml?ln=primefaces&v=5.3:2init @ primefaces.js.xhtml?ln=primefaces&v=5.3:2(anonymous function) @ primefaces.js.xhtml?ln=primefaces&v=5.3:2
validation.js.xhtml?ln=primefaces&v=5.3:1Uncaught ReferenceError: $ is not defined(anonymous function) @ validation.js.xhtml?ln=primefaces&v=5.3:1
beanvalidation.js.xhtml?ln=primefaces&v=5.3:1Uncaught TypeError: Cannot set property 'javax.faces.validator.BeanValidator.MESSAGE' of undefined(anonymous function) @ beanvalidation.js.xhtml?ln=primefaces&v=5.3:1
gmap.js.xhtml?ln=primefaces&v=5.3:1Uncaught TypeError: Cannot read property 'DeferredWidget' of undefined(anonymous function) @ gmap.js.xhtml?ln=primefaces&v=5.3:1
primefaces.js.xhtml?ln=primefaces&v=5.3:1Uncaught TypeError: Cannot read property 'GMap' of undefinedcreateWidget @ primefaces.js.xhtml?ln=primefaces&v=5.3:1cw @ primefaces.js.xhtml?ln=primefaces&v=5.3:1(anonymous function) @ 0:19i @ jquery.js.xhtml?ln=primefaces&v=5.3:25fireWith @ jquery.js.xhtml?ln=primefaces&v=5.3:25ready @ jquery.js.xhtml?ln=primefaces&v=5.3:25bY @ jquery.js.xhtml?ln=primefaces&v=5.3:25
primefaces.js.xhtml?ln=primefaces&v=5.3:2Uncaught ReferenceError: $ is not definedresolveUserAgent @ primefaces.js.xhtml?ln=primefaces&v=5.3:2init @ primefaces.js.xhtml?ln=primefaces&v=5.3:2(anonymous function) @ primefaces.js.xhtml?ln=primefaces&v=5.3:2
validation.js.xhtml?ln=primefaces&v=5.3:1Uncaught ReferenceError: $ is not defined(anonymous function) @ validation.js.xhtml?ln=primefaces&v=5.3:1
beanvalidation.js.xhtml?ln=primefaces&v=5.3:1Uncaught TypeError: Cannot set property 'javax.faces.validator.BeanValidator.MESSAGE' of undefined(anonymous function) @ beanvalidation.js.xhtml?ln=primefaces&v=5.3:1
gmap.js.xhtml?ln=primefaces&v=5.3:1Uncaught TypeError: Cannot read property 'DeferredWidget' of undefined(anonymous function) @ gmap.js.xhtml?ln=primefaces&v=5.3:1
primefaces.js.xhtml?ln=primefaces&v=5.3:1Uncaught TypeError: Cannot read property 'GMap' of undefinedcreateWidget @ primefaces.js.xhtml?ln=primefaces&v=5.3:1cw @ primefaces.js.xhtml?ln=primefaces&v=5.3:1(anonymous function) @ 0:19i @ jquery.js.xhtml?ln=primefaces&v=5.3:25fireWith @ jquery.js.xhtml?ln=primefaces&v=5.3:25ready @ jquery.js.xhtml?ln=primefaces&v=5.3:25bY @ jquery.js.xhtml?ln=primefaces&v=5.3:25
primefaces.js.xhtml?ln=primefaces&v=5.3:2Uncaught ReferenceError: $ is not definedresolveUserAgent @ primefaces.js.xhtml?ln=primefaces&v=5.3:2init @ primefaces.js.xhtml?ln=primefaces&v=5.3:2(anonymous function) @ primefaces.js.xhtml?ln=primefaces&v=5.3:2
validation.js.xhtml?ln=primefaces&v=5.3:1 Uncaught ReferenceError: $ is not defined(anonymous function) @ validation.js.xhtml?ln=primefaces&v=5.3:1
beanvalidation.js.xhtml?ln=primefaces&v=5.3:1 Uncaught TypeError: Cannot set property 'javax.faces.validator.BeanValidator.MESSAGE' of undefined(anonymous function) @ beanvalidation.js.xhtml?ln=primefaces&v=5.3:1
gmap.js.xhtml?ln=primefaces&v=5.3:1 Uncaught TypeError: Cannot read property 'DeferredWidget' of undefined(anonymous function) @ gmap.js.xhtml?ln=primefaces&v=5.3:1
primefaces.js.xhtml?ln=primefaces&v=5.3:1Uncaught TypeError: Cannot read property 'GMap' of undefined

person Jo_bast    schedule 06.09.2016    source источник
comment
Вы пытались поставить jquery перед другими скриптами?   -  person raven    schedule 07.09.2016
comment
Скрипт Jquery генерируется простыми лицами. В BalusC ответ. В ответе сказано не помещать jquery в ‹o:deferredScript›. @Роберто Де Ла Парра   -  person Jo_bast    schedule 07.09.2016
comment
Так почему же тогда у вас есть это в вашем xhtml?   -  person raven    schedule 07.09.2016
comment
У меня его нет в моем xhtml. @РобертоДеЛаПарра   -  person Jo_bast    schedule 07.09.2016


Ответы (2)


Вы также можете установить «primefaces.MOVE_SCRIPTS_TO_BOTTOM» в своем web.xml, начиная с 6.2, для этого даже не требуется омнифейс.

person tandraschko    schedule 25.02.2019

Вы должны поместить часть jquery-plugins перед частью onbegin.

 <h:outputScript name="js/primefaces.deferred.js" target="head"/>
 <o:deferredScript library="primefaces" name="jquery/jquery-plugins.js"/>
 <o:deferredScript library="primefaces" name="primefaces.js" onbegin="DeferredPrimeFaces.begin()" />
 <o:deferredScript library="primefaces" name="watermark/watermark.js" onsuccess="DeferredPrimeFaces.apply()"/>
person codyLine    schedule 24.02.2019