2017-06-15 58 views
0

我的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> 

,但無法做到了。有沒有其他的選擇?提前感謝提示。

回答

1

你最好在頭部聲明ALL命名空間,或者在頭部加載一個通用腳本。

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

,並確保all.js本身不被其他var ALL = {}覆蓋。

var ALL = ALL || {}; 
+0

啊,解決了它。 「代碼」 Steve