template plantillas gratis define bootstrap jsf resources

plantillas - ¿Cómo cargar recursos dinámicos en JSF?



ui:composition primefaces (1)

Me gustaría cargar el recurso dinámico (JavaScript generado, configuración técnica en JSON) como recurso dinámico, usando la etiqueta h:outputScript . Soy consciente de que puedo hacerlo escribiendo mi propio servlet y cargándolo a través de scripts de etiquetas normales, por lo que preferiría el "modo JSF" de carga de recursos.

¿Es posible y cómo?


Si es posible. Puede lograr esto utilizando un nombre de biblioteca de recursos específico y tener una intercepción de ResourceHandler personalizada en él y devolver un Resource personalizado cuando se solicite un recurso de la biblioteca específica.

P.ej

<h:outputScript library="dynamicJs" name="some.js" />

con

public class DynamicJsResourceHandler extends ResourceHandlerWrapper { public DynamicJsResourceHandler(ResourceHandler wrapped) { super(wrapped); } @Override public Resource createResource(String resourceName, String libraryName) { if ("dynamicJs".equals(libraryName)) { return new DynamicJsResource(resourceName); } else { return super.createResource(resourceName, libraryName); } } }

y

public class DynamicJsResource extends Resource { private String resourceName; public DynamicJsResource(String resourceName) { this.resourceName; } @Override public String getRequestPath() { // TODO: return "/context/javax.faces.resource/" + resourceName + ".xhtml?ln=dynamicJs"; } @Override public URL getURL() { // TODO: return new URL("http://localhost:8080" + getRequestPath()); } @Override public Map<String, String> getResponseHeaders() { // TODO: return desired HTTP response headers. } @Override public InputStream getInputStream() throws IOException { // TODO: return InputStream by resourceName. } @Override public boolean userAgentNeedsUpdate(FacesContext context) { // TODO: return true when resource has been modified in server side. } }

Para que se ejecute, regístrelo de la siguiente manera en faces-config.xml:

<application> <resource-handler>com.example.DynamicJsResourceHandler</resource-handler> </application>

Si usa la biblioteca de utilidades JSF OmniFaces , también puede guardar el código org.omnifaces.resourcehandler.DynamicResource y extenderlo desde su org.omnifaces.resourcehandler.DynamicResource por lo que solo necesita implementar getInputStream() . Si no usa OmniFaces, siempre puede usar su código fuente como guía.