2017-06-15 18 views
0

私のjsf-projectのjavascriptリソースの読み込み順序に問題があります。JSF 2.2:headの代わりにbodyにjsf.jsとomnifaces.jsを手動で出力

<o:commandScript name="ALL.selectTypes" action="#{bean.typeSelected}"> 
:私はall.jsで定義されたJavaScript関数をomnifaces commandscriptタグを使用する一部のページで

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

:私のマスターテンプレートでは、私はページの一番下にあるすべてのスクリプトを読み込みます

私は両方のスクリプトは自分ながら、文書の先頭に表示されますので、理由は、一度にjsf.jsとomnifaces.jsがロードされ、all.jsがまだロードされていないこと、である

ReferenceError: ALL is not defined 

を取得スクリプトは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

関連する問題