diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowActionListener.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowActionListener.java index 9d75efe5..a8fec695 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowActionListener.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowActionListener.java @@ -34,8 +34,18 @@ import org.springframework.util.StringUtils; */ public class FlowActionListener implements ActionListener { + private ActionListener delegate; + + public FlowActionListener(ActionListener delegate) { + this.delegate = delegate; + } + public void processAction(ActionEvent actionEvent) throws AbortProcessingException { + if (!JsfFlowUtils.isFlowRequest()) { + delegate.processAction(actionEvent); + } + FacesContext context = FacesContext.getCurrentInstance(); ActionSource source = (ActionSource) actionEvent.getSource(); String result = null; diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowExecutionViewHandler.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowExecutionViewHandler.java index 1daffaf6..8042b32b 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowExecutionViewHandler.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowExecutionViewHandler.java @@ -40,6 +40,9 @@ public class FlowExecutionViewHandler extends ViewHandler { } public String getActionURL(FacesContext context, String viewId) { + if (!JsfFlowUtils.isFlowRequest()) { + return delegate.getActionURL(context, viewId); + } return RequestContextHolder.getRequestContext().getFlowExecutionUrl(); } diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContext.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContext.java index 8d447b53..0bcfd5c5 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContext.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContext.java @@ -67,7 +67,7 @@ public class FlowFacesContext extends FacesContext { * Translates a FacesMessage to an SWF Message and adds it to the current MessageContext */ public void addMessage(String clientId, FacesMessage message) { - if (RequestContextHolder.getRequestContext() == null) { + if (!JsfFlowUtils.isFlowRequest()) { delegate.addMessage(clientId, message); return; } @@ -96,7 +96,7 @@ public class FlowFacesContext extends FacesContext { */ @SuppressWarnings("unchecked") public Iterator getClientIdsWithMessages() { - if (RequestContextHolder.getRequestContext() == null) { + if (!JsfFlowUtils.isFlowRequest()) { return delegate.getClientIdsWithMessages(); } return new ClientIdIterator(); @@ -108,7 +108,7 @@ public class FlowFacesContext extends FacesContext { */ public FacesMessage.Severity getMaximumSeverity() { - if (RequestContextHolder.getRequestContext() == null) { + if (!JsfFlowUtils.isFlowRequest()) { return delegate.getMaximumSeverity(); } @@ -134,7 +134,7 @@ public class FlowFacesContext extends FacesContext { */ @SuppressWarnings("unchecked") public Iterator getMessages() { - if (RequestContextHolder.getRequestContext() == null) { + if (!JsfFlowUtils.isFlowRequest()) { return delegate.getMessages(); } return new FacesMessageIterator(); @@ -146,14 +146,14 @@ public class FlowFacesContext extends FacesContext { */ @SuppressWarnings("unchecked") public Iterator getMessages(String clientId) { - if (RequestContextHolder.getRequestContext() == null) { + if (!JsfFlowUtils.isFlowRequest()) { return delegate.getMessages(clientId); } return new FacesMessageIterator(clientId); } public boolean getRenderResponse() { - if (RequestContextHolder.getRequestContext() == null) { + if (!JsfFlowUtils.isFlowRequest()) { return delegate.getRenderResponse(); } @@ -167,7 +167,7 @@ public class FlowFacesContext extends FacesContext { public boolean getResponseComplete() { - if (RequestContextHolder.getRequestContext() == null) { + if (!JsfFlowUtils.isFlowRequest()) { return delegate.getResponseComplete(); } @@ -180,7 +180,7 @@ public class FlowFacesContext extends FacesContext { } public void renderResponse() { - if (RequestContextHolder.getRequestContext() == null) { + if (!JsfFlowUtils.isFlowRequest()) { delegate.renderResponse(); return; } @@ -188,7 +188,7 @@ public class FlowFacesContext extends FacesContext { } public void responseComplete() { - if (RequestContextHolder.getRequestContext() == null) { + if (!JsfFlowUtils.isFlowRequest()) { delegate.responseComplete(); return; } diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowRenderKitWrapper.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowRenderKitWrapper.java index fb99f98e..9728d475 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowRenderKitWrapper.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowRenderKitWrapper.java @@ -57,6 +57,9 @@ public class FlowRenderKitWrapper extends RenderKit { } public ResponseStateManager getResponseStateManager() { + if (!JsfFlowUtils.isFlowRequest()) { + return delegate.getResponseStateManager(); + } return manager; } diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfFlowUtils.java b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfFlowUtils.java index 4510f6c0..d20fde94 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfFlowUtils.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfFlowUtils.java @@ -65,4 +65,11 @@ class JsfFlowUtils { } } } + + public static boolean isFlowRequest() { + if (RequestContextHolder.getRequestContext() == null) { + return false; + } + return true; + } } diff --git a/spring-faces/src/test/java/org/springframework/faces/webflow/FlowActionListenerTests.java b/spring-faces/src/test/java/org/springframework/faces/webflow/FlowActionListenerTests.java index e2cb672e..700166bc 100644 --- a/spring-faces/src/test/java/org/springframework/faces/webflow/FlowActionListenerTests.java +++ b/spring-faces/src/test/java/org/springframework/faces/webflow/FlowActionListenerTests.java @@ -20,7 +20,7 @@ import org.springframework.webflow.execution.RequestContextHolder; public class FlowActionListenerTests extends TestCase { - FlowActionListener listener = new FlowActionListener(); + FlowActionListener listener; JSFMockHelper jsfMock = new JSFMockHelper(); @@ -29,6 +29,7 @@ public class FlowActionListenerTests extends TestCase { protected void setUp() throws Exception { jsfMock.setUp(); + listener = new FlowActionListener(jsfMock.application().getActionListener()); RequestContextHolder.setRequestContext(context); AttributeMap flash = new LocalAttributeMap(); expect(context.getFlashScope()).andStubReturn(flash);