2010-11-24 10 views
9

Ich fange an, mit JSF 2 zu arbeiten, also wollte ich h: outputStylesheet versuchen. Es funktioniert gut, aber dann habe ich versucht, das "Muster" oder den Trick des Hinzufügens einer Abfragezeichenfolge zu der Anfrage anzuwenden, die sich mit der Dateiversion ändert, um Browser zu zwingen, Änderungen zu holen.Wie kann ich "CSS-Versionierung" (um Cache-Probleme zu lösen) mit JSF 2 h: outputStylesheet implementieren?

So etwas wie what is used here.

Leider konnte ich es nicht tun. Bei Verwendung dieses Tags wird keine einfache URL generiert, sondern eine berechnete URL, die bereits eine Abfragezeichenfolge enthält. Ich habe einige Informationen über Versionierung von Ressourcen in JSF 2 sowohl in der Spezifikation und here gefunden, aber es scheint sich auf mehrere Versionen einer Ressource zu beziehen, die nicht das ist, was ich brauche.

Natürlich kann ich immer wieder gehen, um das neue Tag NICHT zu verwenden. Aber ich wollte das hier zur Diskussion teilen.

Update 1 - einige Beispiel: so etwas wie dieses

Was ich versucht habe, ist:

<h:outputStylesheet library="css" name="estilo.css?v=1" target="head"/> 

die als rendert:

<link type="text/css" rel="stylesheet" href="RES_NOT_FOUND" /> 

Ganz beschreibend.

<link rel="stylesheet" type="text/css" href="../css/estilo.css?v=1"/> 

Welche, mit JSP, ich auf diese Weise zu setzen verwendet: ;-)

Was ich versuche, etwas zu bekommen, ist

<link rel="stylesheet" type="text/css" 
href="<c:url value='/css/estilo.css?v=${initParam.version}'/>"/> 
+0

Können Sie nach ein Beispiel von dem, was Sie versucht haben? :) –

+0

Reeeally neugierig darüber. Diese Funktion sollte in jedem Web-Framework gebündelt werden. Fügen Sie den Expires-HTTP-Header bereits zu statischen Ressourcen hinzu oder warum benötigen Sie dies (andernfalls würden die Clients immer eine Anfrage stellen, um zu überprüfen, ob sich die Dateien geändert haben und aktualisieren, wenn sie ... hätten sie das nicht)? –

+0

Aktualisierung mit einigen Beispielen. – sargue

Antwort

7

vor der gleichen Herausforderung, landete ich up erweitern javax.faces.application.ResourceHandlerWrapper and javax.faces.application.ResourceWrapper, um "& v = xyz" an das Ergebnis von ResourceWrapper#getRequestString() anzufügen.

Ich sah diese Art von Lösung von Primefaces und Openfaces implementiert. Werfen Sie einen Blick auf die Quelle der

org.primefaces.application.PrimeResourceHandler#createResource(String resourceName, String libraryName) 

und

org.primefaces.application.PrimeResource#getRequestPath() 

Available here.

Vergessen Sie nicht, Ihre Implementierung faces-config.xml hinzu:

<application> 
    <resource-handler>your.package.YourResourceHandlerWrapper</resource-handler> 
</application> 
Verwandte Themen