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