2010-09-28 14 views
0

J'ai une page qui se compose de fragments de couple et dans le fragment "en-tête" j'ai cette étiquette <webuijsf:script id="script_logo" url="/resources/logo.js"/>. Cela est rendu au format HTML sous la forme <script src="/app/resources/logo.js" type="text/javascript" id="Header:script_logo"></script>. C'est bien et ça fonctionne comme prévu. Maintenant, je dois forcer JSF en quelque sorte à retourner l'URL du javascript avec la version actuelle de l'application. C'est une technique connue pour forcer le rechargement de la ressource (javascript, css et images) au cas où ils seraient encaissés du côté client. Je dois rendre quelque chose comme <script src="/app/resources/logo.js?ver=1.0.405" type="text/javascript" id="Header:script_logo"></script>. Veuillez noter le paramètre ver dans l'URL.
Merci.
TomasRendu de mon propre <script> tag au lieu de celui fourni par JSF

Répondre

2

Eh bien, vous pouvez simplement l'ajouter à la page:

<script src="/app/resources/logo.js?ver=#{commonBean.version}" ...> 

J'ai supposé que vous voulez à la version à être configurable et envoyé par le serveur, donc commonBean est une fève jsf qui retourne la bonne version. Mise à jour: consultez également <rich:loadScritp>. (à partir de RichFaces)

La dernière option consiste à créer votre propre composant et à inclure la version automatiquement. Rechercher un tutoriel sur la façon de faire cela, ce n'est pas facile pour JSF 1.2

+0

Je pensais à quelque chose de plus générique où je n'ai pas besoin de passer par le code et d'ajouter à chaque occurrence de la balise '

0

Eh bien c'est assez facile. JSF 2 utilise une configuration pour lier un moteur de rendu à un composant. Pour cela, vous avez besoin d'une famille de composants et d'un type de rendu. Vous pouvez maintenant définir dans votre faces-config.xml un rendu pour cette famille et ce type de rendu.

Dans Mojorra la configuration suivante est définie pour un outputScript-composant:

<renderer> 
    <component-family>javax.faces.Output</component-family> 
    <renderer-type>javax.faces.resource.Script</renderer-type> 
    <renderer-class>com.sun.faces.renderkit.html_basic.ScriptRenderer</renderer-class> 
</renderer> 

Je dois admettre que cette information vient de mon débogage. J'ai débogué le ScriptRenderer et était capable d'obtenir la famille de composants et le type de rendu à partir de UIComponent.

Maintenant, si vous utilisez un autre moteur de rendu pour ce composant, il suffit de changer la configuration et l'original sera écrasé:

<renderer> 
    <component-family>javax.faces.Output</component-family> 
    <renderer-type>javax.faces.resource.Script</renderer-type> 
    <renderer-class>your.own.renderer.class</renderer-class> 
</renderer> 

Ne pas oublier, tous les h: composants outputScript rendront maintenant avec le nouveau moteur de rendu . Il en va de même avec les feuilles de style, mais celles-ci auront un autre type de rendu.

+0

Notez que OP utilise JSF 1.2 avec Woodstock. Votre réponse est donc totalement inapplicable. – BalusC