jsf 2 - How can I get JSF 2.0 to include JS as 'application/javascript' instead of 'text/javascript' -
jsf 2 - How can I get JSF 2.0 to include JS as 'application/javascript' instead of 'text/javascript' -
in our jsf 2.0 application @ work, include several javascript files via <h:outputscript>
.
<h:outputscript library="javascript" name="dostuff.js"/>
the resulting html references them 'text/javascript'.
<script type="text/javascript" src="/mycontext/javax.faces.resource/dostuff.js.jsf?ln=javascript"></script>
according this question, "text/javascript" obsolete, what's more, htmlunit complains type rather verbosely. of course, works fine , shut off htmlunit's logging, i'd rather have jsf generate right type.
is there way override type chosen <h:outputscript>
?
this hardcoded in default renderer of <h:outputscript>
. assuming you're using mojarra, it's com.sun.faces.renderkit.html_basic.scriptrenderer
. according source, type
attribute been set in startelement
method. override it:
public class extendedscriptrenderer extends scriptrenderer { @override protected void startelement(responsewriter writer, uicomponent component) throws ioexception { writer.startelement("script", component); writer.writeattribute("type", "application/javascript", "type"); } }
or if want provide enduser possibility specify type
attribute , default application/javascript
when unspecified:
public class extendedscriptrenderer extends scriptrenderer { @override protected void startelement(responsewriter writer, uicomponent component) throws ioexception { writer.startelement("script", component); string type = (string) component.getattributes().get("type"); if (type == null) type = "application/javascript"; writer.writeattribute("type", type, "type"); } }
to run, register follows in faces-config.xml
:
<render-kit> <renderer> <component-family>javax.faces.output</component-family> <renderer-type>javax.faces.resource.script</renderer-type> <renderer-class>com.example.extendedscriptrenderer</renderer-class> </renderer> </render-kit>
there's way nice @facesrenderer
annotation should work follows
@facesrenderer(componentfamily="javax.faces.output", renderertype="javax.faces.resource.script") public class extendedscriptrenderer extends scriptrenderer { // ... }
however, when it's been definied standard renderer (the scriptrenderer
!), custom 1 fail override @facesrenderer
. see issue 1748.
javascript jsf-2 mime-types
Comments
Post a Comment