From 077e34600f032468dc2112f3ab2db06ce7eec22f Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Fri, 7 Mar 2014 12:40:13 -0500 Subject: [PATCH] Add FlowAjaxTiles3View Issue: SPR-1575 --- .../webflow/mvc/view/FlowAjaxTiles3View.java | 61 +++++++++++++++++++ .../webflow/mvc/view/FlowAjaxTilesView.java | 32 +++++----- 2 files changed, 79 insertions(+), 14 deletions(-) create mode 100644 spring-webflow/src/main/java/org/springframework/webflow/mvc/view/FlowAjaxTiles3View.java diff --git a/spring-webflow/src/main/java/org/springframework/webflow/mvc/view/FlowAjaxTiles3View.java b/spring-webflow/src/main/java/org/springframework/webflow/mvc/view/FlowAjaxTiles3View.java new file mode 100644 index 00000000..9b63e7db --- /dev/null +++ b/spring-webflow/src/main/java/org/springframework/webflow/mvc/view/FlowAjaxTiles3View.java @@ -0,0 +1,61 @@ +/* + * Copyright 2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.webflow.mvc.view; + +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.js.ajax.tiles3.AjaxTilesView; +import org.springframework.webflow.execution.RequestContext; +import org.springframework.webflow.execution.RequestContextHolder; +import org.springframework.webflow.execution.View; + +/** + * Tiles view implementation that is able to handle partial rendering for Spring + * Javascript Ajax requests. + * + *

This implementation uses the {@link org.springframework.js.ajax.SpringJavascriptAjaxHandler} + * by default to determine whether the current request is an Ajax request. On an + * Ajax request for an active flow execution, the fragments set by a {@code } + * action will be respected, otherwise the parent + * {@link org.springframework.js.ajax.tiles2.AjaxTilesView}'s resolution algorithm + * will be applied. + * + * @author Rossen Stoyanchev + * @since 2.4 + */ +public class FlowAjaxTiles3View extends AjaxTilesView { + + + protected String[] getRenderFragments(Map model, HttpServletRequest request, + HttpServletResponse response) { + + RequestContext context = RequestContextHolder.getRequestContext(); + if (context == null) { + return super.getRenderFragments(model, request, response); + } + + String[] fragments = (String[]) context.getFlashScope().get(View.RENDER_FRAGMENTS_ATTRIBUTE); + if (fragments == null) { + return super.getRenderFragments(model, request, response); + } + + return fragments; + } + +} diff --git a/spring-webflow/src/main/java/org/springframework/webflow/mvc/view/FlowAjaxTilesView.java b/spring-webflow/src/main/java/org/springframework/webflow/mvc/view/FlowAjaxTilesView.java index 3e0eb222..34e3c777 100644 --- a/spring-webflow/src/main/java/org/springframework/webflow/mvc/view/FlowAjaxTilesView.java +++ b/spring-webflow/src/main/java/org/springframework/webflow/mvc/view/FlowAjaxTilesView.java @@ -20,37 +20,41 @@ import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.springframework.js.ajax.SpringJavascriptAjaxHandler; import org.springframework.js.ajax.tiles2.AjaxTilesView; import org.springframework.webflow.execution.RequestContext; import org.springframework.webflow.execution.RequestContextHolder; import org.springframework.webflow.execution.View; /** - * Tiles view implementation that is able to handle partial rendering for Spring Javascript Ajax requests. - * - *

- * This implementation uses the {@link SpringJavascriptAjaxHandler} by default to determine whether the current request - * is an Ajax request. On an Ajax request for an active flow execution, the fragments set by a {@code } action - * will be respected, otherwise the parent {@link AjaxTilesView}'s resolution algorithm will be applied. - *

+ * Tiles view implementation that is able to handle partial rendering for Spring + * Javascript Ajax requests. + * + *

This implementation uses the {@link org.springframework.js.ajax.SpringJavascriptAjaxHandler} + * by default to determine whether the current request is an Ajax request. On an + * Ajax request for an active flow execution, the fragments set by a {@code } + * action will be respected, otherwise the parent + * {@link org.springframework.js.ajax.tiles2.AjaxTilesView}'s resolution algorithm + * will be applied. * * @author Jeremy Grelle */ public class FlowAjaxTilesView extends AjaxTilesView { + protected String[] getRenderFragments(Map model, HttpServletRequest request, HttpServletResponse response) { + RequestContext context = RequestContextHolder.getRequestContext(); if (context == null) { return super.getRenderFragments(model, request, response); - } else { - String[] fragments = (String[]) context.getFlashScope().get(View.RENDER_FRAGMENTS_ATTRIBUTE); - if (fragments == null) { - return super.getRenderFragments(model, request, response); - } - return fragments; } + + String[] fragments = (String[]) context.getFlashScope().get(View.RENDER_FRAGMENTS_ATTRIBUTE); + if (fragments == null) { + return super.getRenderFragments(model, request, response); + } + + return fragments; } }