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

Popular posts from this blog

iphone - Dismissing a UIAlertView -

intellij idea - Update external libraries with intelij and java -

javascript - send data from a new window to previous window in php -