10

In JSF page templates I use this code to include a CSS resource:

<h:outputStylesheet library="css" name="mystyles.css"  />

The usual way to implement CSS cache busting would be to add a version parameter, like v=123, however this is not supported in outputStyleSheet:

<h:outputStylesheet library="css" name="mystyles.css?v=123"  />

will cause a JSF1064 warning and the CSS will not be found.

mjn
  • 36,362
  • 28
  • 176
  • 378

1 Answers1

11

That's not possible without overridding the StylesheetRenderer (assuming you're on Mojarra). It does indeed not take the query string into account. However, as a (temporary) workaround it's good to know that it is valid to include the CSS using CSS' own @import rule inside <h:outputStyleSheet>.

<h:outputStylesheet target="head">
    @import url('css/mystyles.css?v=123')
</h:outputStylesheet>

You might want to post an enhancement request to the Mojarra boys to take this into account in future releases.

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
  • 1
    @banter: better use resource library versioning. See also bottom of this answer: http://stackoverflow.com/questions/11988415/what-is-the-jsf-resource-library-for-and-how-should-it-be-used/11988418#11988418 – BalusC Feb 28 '13 at 11:36
  • Thanks, but I would like to avoid to rename directories. From JSP, I am used to define scripts version via maven version propagated to request. So it does not look like that there is a simple solution in JSF. – banterCZ Feb 28 '13 at 12:06
  • 2
    @banter: Create a custom resource handler then. – BalusC Feb 28 '13 at 12:07
  • What about not to use 'h' tags and write just html? – banterCZ Feb 28 '13 at 12:22