diff --git a/spring-faces/src/main/java/org/springframework/faces/ui/DojoStyleRenderer.java b/spring-faces/src/main/java/org/springframework/faces/ui/DojoStyleRenderer.java index e4c9b460..528ccad1 100644 --- a/spring-faces/src/main/java/org/springframework/faces/ui/DojoStyleRenderer.java +++ b/spring-faces/src/main/java/org/springframework/faces/ui/DojoStyleRenderer.java @@ -10,11 +10,11 @@ import org.springframework.faces.ui.resource.ResourceHelper; public class DojoStyleRenderer extends Renderer { - private String dijitThemePath = "/dijit/themes/"; + private static final String dijitThemePath = "/dijit/themes/"; - private String dijitTheme = "tundra"; + private static final String dijitTheme = "tundra"; - private ResourceHelper resourceHelper = new ResourceHelper(); + private static final ResourceHelper resourceHelper = new ResourceHelper(); public void encodeBegin(FacesContext context, UIComponent component) throws IOException { diff --git a/spring-faces/src/main/java/org/springframework/faces/ui/ResourceGroupRenderer.java b/spring-faces/src/main/java/org/springframework/faces/ui/ResourceGroupRenderer.java new file mode 100644 index 00000000..61297b0d --- /dev/null +++ b/spring-faces/src/main/java/org/springframework/faces/ui/ResourceGroupRenderer.java @@ -0,0 +1,27 @@ +package org.springframework.faces.ui; + +import java.io.IOException; + +import javax.faces.component.UIComponent; +import javax.faces.context.FacesContext; +import javax.faces.render.Renderer; + +import org.springframework.faces.ui.resource.ResourceHelper; + +public class ResourceGroupRenderer extends Renderer { + + private static final ResourceHelper resourceHelper = new ResourceHelper(); + + public void encodeBegin(FacesContext context, UIComponent component) throws IOException { + + if (component.getChildCount() > 0) { + resourceHelper.beginCombineStyles(context); + } + } + + public void encodeEnd(FacesContext context, UIComponent component) throws IOException { + if (component.getChildCount() > 0) { + resourceHelper.endCombineStyles(context); + } + } +} diff --git a/spring-faces/src/main/java/org/springframework/faces/ui/ResourceRenderer.java b/spring-faces/src/main/java/org/springframework/faces/ui/ResourceRenderer.java new file mode 100644 index 00000000..f9a294a1 --- /dev/null +++ b/spring-faces/src/main/java/org/springframework/faces/ui/ResourceRenderer.java @@ -0,0 +1,27 @@ +package org.springframework.faces.ui; + +import java.io.IOException; + +import javax.faces.component.UIComponent; +import javax.faces.context.FacesContext; +import javax.faces.render.Renderer; + +import org.springframework.faces.ui.resource.ResourceHelper; +import org.springframework.util.Assert; + +public class ResourceRenderer extends Renderer { + + private static final ResourceHelper resourceHelper = new ResourceHelper(); + + public void encodeEnd(FacesContext context, UIComponent component) throws IOException { + String resourcePath = (String) component.getAttributes().get("resourcePath"); + Assert.hasText(resourcePath, "Resource component " + component.getClientId(context) + + " is missing a resourcePath."); + if (!resourcePath.startsWith("/")) { + resourcePath = "/" + resourcePath; + component.getAttributes().put("resourcePath", resourcePath); + } + resourceHelper.renderResource(context, resourcePath); + } + +} diff --git a/spring-faces/src/main/java/org/springframework/faces/ui/resource/ResourceHelper.java b/spring-faces/src/main/java/org/springframework/faces/ui/resource/ResourceHelper.java index 56d297ed..bc0f9bf9 100644 --- a/spring-faces/src/main/java/org/springframework/faces/ui/resource/ResourceHelper.java +++ b/spring-faces/src/main/java/org/springframework/faces/ui/resource/ResourceHelper.java @@ -16,9 +16,11 @@ package org.springframework.faces.ui.resource; import java.io.IOException; +import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; +import java.util.List; import java.util.Map; import java.util.Set; @@ -37,6 +39,22 @@ public class ResourceHelper { private static final String RENDERED_RESOURCES_KEY = "org.springframework.faces.RenderedResources"; + private static final String COMBINED_RESOURCES_KEY = "org.springframework.faces.CombinedResources"; + + /** + * Renders either a script or style resource depending on the resourcePath + * @param facesContext + * @param resourcePath + * @throws IOException + */ + public void renderResource(FacesContext facesContext, String resourcePath) throws IOException { + if (resourcePath.endsWith(".js")) { + renderScriptLink(facesContext, resourcePath); + } else if (resourcePath.endsWith(".css")) { + renderStyleLink(facesContext, resourcePath); + } + } + /** * Render a