PrimeFaces和JQuery:资源排序

时间:2017-02-22 11:56:46

标签: jquery jsf primefaces jsf-2

我的JQuery导入顺序有问题。 在头部我做:

<h:head>
<f:facet name="first">
     <h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />
</f:facet>
<f:facet name="middle">
  <h:outputScript library="primefaces" name="jquery/jquery-plugins.js" target="head" />
</f:facet>
...

第一次加载我的页面时,一切似乎都是正确的,尤其是jquery / jquery-plugins命令:

    <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head id="j_idt2">
<link type="text/css" rel="stylesheet" href="/installateurportal/javax.faces.resource/theme.css.jsf?ln=primefaces-aristo" />
<link type="text/css" rel="stylesheet" href="/installateurportal/javax.faces.resource/components.css.jsf?ln=primefaces&amp;v=6.0" />
<link type="text/css" rel="stylesheet" href="/installateurportal/javax.faces.resource/css/default/core.css.jsf?ln=bsf" />
<link type="text/css" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" />
<link type="text/css" rel="stylesheet" href="/installateurportal/javax.faces.resource/css/bsf.css.jsf?ln=bsf" />
<!--[if lt IE 9]><script src="/installateurportal/javax.faces.resource/js/html5shiv.js.jsf?ln=bsf"></script><script src="/installateurportal/javax.faces.resource/js/respond.js.jsf?ln=bsf"></script><![endif]-->
<script type="text/javascript" src="/installateurportal/javax.faces.resource/jquery/jquery.js.jsf?ln=primefaces&amp;v=6.0"></script>
<script type="text/javascript" src="/installateurportal/javax.faces.resource/jquery/jquery-plugins.js.jsf?ln=primefaces&amp;v=6.0"></script>
<script type="text/javascript" src="/installateurportal/javax.faces.resource/core.js.jsf?ln=primefaces&amp;v=6.0"></script>
...

页面上有按钮,如

<h:commandLink styleClass="btn btn-mini btn-default"
   actionListener="#{testController['filterTable']}">
   <i class="fa fa-refresh"/>
</h:commandLink>                     

按下其中一个页面后,再次加载页面,并在JS-Console中加载错误,如

Uncaught ReferenceError: jQuery is not defined
    at tbmDisposition-aendernPF.jsf:3
VM219 jquery-plugins.js.jsf?ln=primefaces&v=6.0:5 Uncaught ReferenceError: jQuery is not defined
    at VM219 jquery-plugins.js.jsf?ln=primefaces&v=6.0:5
    at VM219 jquery-plugins.js.jsf?ln=primefaces&v=6.0:5

当你看到生成的html:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head id="j_idt2">
<link type="text/css" rel="stylesheet" href="/installateurportal/javax.faces.resource/theme.css.jsf?ln=primefaces-aristo" />
<link type="text/css" rel="stylesheet" href="/installateurportal/javax.faces.resource/css/default/core.css.jsf?ln=bsf" />
<link type="text/css" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" />
<link type="text/css" rel="stylesheet" href="/installateurportal/javax.faces.resource/css/bsf.css.jsf?ln=bsf" />
<!--[if lt IE 9]><script src="/installateurportal/javax.faces.resource/js/html5shiv.js.jsf?ln=bsf"></script><script src="/installateurportal/javax.faces.resource/js/respond.js.jsf?ln=bsf"></script><![endif]-->
<link type="text/css" rel="stylesheet" href="/installateurportal/javax.faces.resource/components.css.jsf?ln=primefaces&amp;v=6.0" />
<script type="text/javascript" src="/installateurportal/javax.faces.resource/jquery/jquery-plugins.js.jsf?ln=primefaces&amp;v=6.0"></script>
<script type="text/javascript" src="/installateurportal/javax.faces.resource/jquery/jquery.js.jsf?ln=primefaces&amp;v=6.0"></script>
<script type="text/javascript" src="/installateurportal/javax.faces.resource/core.js.jsf?ln=primefaces&amp;v=6.0"></script>
...

你可以看到jquery-plugins 高于 jquery导致了所描述的错误。

当然,我在头部尝试了各种替代方案但没有成功,所以任何帮助都会受到赞赏。

版本信息

PrimeFacs:6.0

JSF:1.2_15-jbossorg-2

服务器:jboss-as-7.1.2.Final

问候 启

更新 调试HeadRenderer我发现HeadRenderer似乎根本不负责JQuery。 它必须与Widget的ResourceDependencies及其呈现方式有关。 有谁知道哪个渲染器可能负责ResourceDependencies?

更新2: 此外我使用BootsFaces进行布局。现在我了解到BootsFaces也有自己的JQuery和资源优化......

更新3: 在BootsFaces的ResourceFileComparator中,JS文件将被重命名为

if (name.contains("jquery-ui")) name = "2.js"; // make it the second JS file
else if (name.contains("jquery")) name = "1.js"; // make it the first JS file

但就我而言,jquery-ui的名称是:&#34; jquery / jquery-plugins.js&#34; =&GT;两者都是&#34; jquery / jquery.js&#34;和&#34; jquery / jquery-plugins.js&#34;将被重命名为&#34; 1.js&#34;

1 个答案:

答案 0 :(得分:0)

我在BootsFaces-OSP(https://github.com/TheCoder4eu/BootsFaces-OSP/issues/640)开始了一个问题并找到了一个解决方法(在问题中描述)。 所以现在它适合我。