2017-06-15 3 views
0

i ont un problème avec la charge ordre de javascript-ressources dans mon projet JSF. dans mon maître-modèle je charge tous les scripts au bas de la page:JSF 2.2: sortie « jsf.js » et « omnifaces.js » manuellement au corps au lieu de la tête

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

sur certaines pages i utiliser les omnifaces CommandScript-tag avec une fonction javascript définie dans all.js:

<o:commandScript name="ALL.selectTypes" action="#{bean.typeSelected}"> 

je reçois

ReferenceError: ALL is not defined 

la raison est que le temps et jsf.js omnifaces.js sont chargés, all.js est pas encore chargé, car les deux scripts apparaissent dans la tête du document alors que mon propre les scripts apparaissent à t il bas. quand je mets mes scripts dans

<h:head> 

place au bas de page, il fonctionne comme prévu. puis-je contrôler manuellement l'apparition de ces scripts pour qu'ils apparaissent comme:

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

l'essai ci-dessus n'a pas d'effet. jsf.js et omnifaces.js sont placés dans la tête quand même. J'ai aussi essayé avec le remplacement

<h:outputScript> 

avec

<o:deferredScript> 

mais ne peut pas fait. Y a-t-il des alternatives? merci d'avance pour des conseils.

Répondre

1

Vous feriez mieux de déclarer l'espace de noms ALL dans la tête ou peut-être dans un script général chargé dans la tête.

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

Et assurez-vous que all.js lui-même ne l'emporte pas par un autre var ALL = {}.

var ALL = ALL || {}; 
+0

ah, qui résout. i maintenant introduit un espace de noms global dans la tête du maître-modèle que je vais utiliser pour toutes les fonctions noms CommandScript: 'code' Steve