JSF 2.2:输出“jsf.js”和“omnifaces.js”到人体而不是头部

问题描述:

我的jsf-project中的javascript-resources的加载顺序有问题。JSF 2.2:输出“jsf.js”和“omnifaces.js”到人体而不是头部

<h:body> 

    ... 

    <ui:insert name="scripts">   
     <h:outputScript name="js/jquery.js" /> 
     <h:outputScript name="js/chart.js" /> 
     <h:outputScript name="js/all.js" /> 
    </ui:insert> 
</h:body> 

在一些网页上我使用omnifaces commandscript标签与all.js定义的JavaScript的功能:

<o:commandScript name="ALL.selectTypes" action="#{bean.typeSelected}"> 
在我的主模板我在页面底部加载的所有脚本

我得到

ReferenceError: ALL is not defined 

的原因是,在那和jsf.js被omnifaces.js装货时,all.js是尚未加载,因为这两个脚本中出现,而我自己的文件头脚本出现在t他底部。当我把我的脚本

<h:head> 

而不是在页面底部它按预期工作。我可以手动控制这些脚本的外观,使它们看起来像:

<h:body> 

    ... 

    <ui:insert name="scripts">  

     <h:outputScript library="javax.faces" name="jsf.js" /> 
     <h:outputScript library="omnifaces" name="omnifaces.js" /> 

     <h:outputScript name="js/jquery.js" /> 
     <h:outputScript name="js/chart.js" /> 
     <h:outputScript name="js/all.js" /> 
    </ui:insert> 
</h:body> 

以上尝试没有任何影响。无论如何,jsf.js和omnifaces.js都置于头部。我也试图与

<o:deferredScript> 

更换

<h:outputScript> 

,但无法做到了。有没有其他的选择?提前感谢提示。

你最好在头部声明ALL命名空间,或者在头部加载一个通用脚本。

<h:head> 
    ... 
    <script>var ALL = {};</script> 
</h:head> 

,并确保all.js本身不被其他var ALL = {}覆盖。

var ALL = ALL || {}; 
+0

啊,解决了它。 “代码” – Steve