TREQ-12 Spring integration

git-svn-id: https://svn.apache.org/repos/asf/tiles/request/trunk@1367698 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/tiles-request-api/src/main/java/org/apache/tiles/request/render/DispatchRenderer.java b/tiles-request-api/src/main/java/org/apache/tiles/request/render/DispatchRenderer.java
index ef3ed25..49a661e 100644
--- a/tiles-request-api/src/main/java/org/apache/tiles/request/render/DispatchRenderer.java
+++ b/tiles-request-api/src/main/java/org/apache/tiles/request/render/DispatchRenderer.java
@@ -24,6 +24,7 @@
 
 import org.apache.tiles.request.Request;
 import org.apache.tiles.request.DispatchRequest;
+import org.apache.tiles.request.RequestWrapper;
 
 /**
  * Renders an attribute that contains a reference to a template.
@@ -38,15 +39,27 @@
         if (path == null) {
             throw new CannotRenderException("Cannot dispatch a null path");
         }
-        if (!(request instanceof DispatchRequest)) {
+        DispatchRequest dispatchRequest = getDispatchRequest(request);
+        if (dispatchRequest == null) {
             throw new CannotRenderException("Cannot dispatch outside of a web environment");
         }
 
-        ((DispatchRequest) request).dispatch(path);
+        dispatchRequest.dispatch(path);
     }
 
     /** {@inheritDoc} */
     public boolean isRenderable(String path, Request request) {
-        return path != null && path.startsWith("/");
+        return path != null && getDispatchRequest(request) != null && path.startsWith("/");
+    }
+
+    private DispatchRequest getDispatchRequest(Request request) {
+        Request result = request;
+        while (!(result instanceof DispatchRequest) && result instanceof RequestWrapper) {
+            result = ((RequestWrapper) result).getWrappedRequest();
+        }
+        if (!(result instanceof DispatchRequest)) {
+            result = null;
+        }
+        return (DispatchRequest) result;
     }
 }