diff --git a/spring-faces/ivy.xml b/spring-faces/ivy.xml
index 2f194238..28f3082f 100644
--- a/spring-faces/ivy.xml
+++ b/spring-faces/ivy.xml
@@ -59,8 +59,8 @@
-
-
+
+
diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/ExternalContextWrapper.java b/spring-faces/src/main/java/org/springframework/faces/webflow/ExternalContextWrapper.java
index 9a18032d..0a77fa50 100644
--- a/spring-faces/src/main/java/org/springframework/faces/webflow/ExternalContextWrapper.java
+++ b/spring-faces/src/main/java/org/springframework/faces/webflow/ExternalContextWrapper.java
@@ -2,9 +2,7 @@ package org.springframework.faces.webflow;
import java.io.IOException;
import java.io.InputStream;
-import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
-import java.io.Writer;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.Principal;
@@ -14,7 +12,6 @@ import java.util.Map;
import java.util.Set;
import javax.faces.context.ExternalContext;
-import javax.faces.context.Flash;
class ExternalContextWrapper extends ExternalContext {
@@ -192,110 +189,4 @@ class ExternalContextWrapper extends ExternalContext {
delegate.setResponseCharacterEncoding(encoding);
}
- // --------------- JSF 2.0 Pass-through delegate methods ------------------//
-
- public String getContextName() {
- return delegate.getContextName();
- }
-
- public void addResponseCookie(String name, String value, Map properties) {
- delegate.addResponseCookie(name, value, properties);
- }
-
- public Flash getFlash() {
- return delegate.getFlash();
- }
-
- public String getMimeType(String file) {
- return delegate.getMimeType(file);
- }
-
- public String getRequestScheme() {
- return delegate.getRequestScheme();
- }
-
- public String getRequestServerName() {
- return delegate.getRequestServerName();
- }
-
- public int getRequestServerPort() {
- return delegate.getRequestServerPort();
- }
-
- public String getRealPath(String path) {
- return delegate.getRealPath(path);
- }
-
- public int getRequestContentLength() {
- return delegate.getRequestContentLength();
- }
-
- public OutputStream getResponseOutputStream() throws IOException {
- return delegate.getResponseOutputStream();
- }
-
- public Writer getResponseOutputWriter() throws IOException {
- return delegate.getResponseOutputWriter();
- }
-
- public void setResponseContentType(String contentType) {
- delegate.setResponseContentType(contentType);
- }
-
- public void invalidateSession() {
- delegate.invalidateSession();
- }
-
- public void setResponseHeader(String name, String value) {
- delegate.setResponseHeader(name, value);
- }
-
- public void addResponseHeader(String name, String value) {
- delegate.addResponseHeader(name, value);
- }
-
- public void setResponseBufferSize(int size) {
- delegate.setResponseBufferSize(size);
- }
-
- public int getResponseBufferSize() {
- return delegate.getResponseBufferSize();
- }
-
- public boolean isResponseCommitted() {
- return delegate.isResponseCommitted();
- }
-
- public void responseReset() {
- delegate.responseReset();
- }
-
- public void responseSendError(int statusCode, String message) throws IOException {
- delegate.responseSendError(statusCode, message);
- }
-
- public void setResponseStatus(int statusCode) {
- delegate.setResponseStatus(statusCode);
- }
-
- public void responseFlushBuffer() throws IOException {
- delegate.responseFlushBuffer();
- }
-
- public void setResponseContentLength(int length) {
- delegate.setResponseContentLength(length);
- }
-
- public String encodeBookmarkableURL(String baseUrl, Map parameters) {
- return delegate.encodeBookmarkableURL(baseUrl, parameters);
- }
-
- public String encodeRedirectURL(String baseUrl, Map parameters) {
- return delegate.encodeRedirectURL(baseUrl, parameters);
- }
-
- public String encodePartialActionURL(String url) {
- return delegate.encodePartialActionURL(url);
- }
-
}
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 a0e2f4d3..a4bb5d14 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
@@ -17,23 +17,17 @@ package org.springframework.faces.webflow;
import java.lang.reflect.Method;
import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
import javax.el.ELContext;
import javax.faces.FactoryFinder;
import javax.faces.application.Application;
import javax.faces.application.FacesMessage;
-import javax.faces.application.ProjectStage;
import javax.faces.component.UIViewRoot;
-import javax.faces.context.ExceptionHandler;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.context.FacesContextFactory;
-import javax.faces.context.PartialViewContext;
import javax.faces.context.ResponseStream;
import javax.faces.context.ResponseWriter;
-import javax.faces.event.PhaseId;
import javax.faces.lifecycle.Lifecycle;
import javax.faces.render.RenderKit;
@@ -75,7 +69,8 @@ public class FlowFacesContext extends FacesContext {
FacesContext defaultFacesContext = facesContextFactory.getFacesContext(context.getExternalContext()
.getNativeContext(), context.getExternalContext().getNativeRequest(), context.getExternalContext()
.getNativeResponse(), lifecycle);
- return new FlowFacesContext(context, defaultFacesContext);
+ return (JsfRuntimeInformation.isAtLeastJsf20()) ? new Jsf2FlowFacesContext(context, defaultFacesContext)
+ : new FlowFacesContext(context, defaultFacesContext);
}
public FlowFacesContext(RequestContext context, FacesContext delegate) {
@@ -205,67 +200,7 @@ public class FlowFacesContext extends FacesContext {
return delegate;
}
- // --------------- JSF 2.0 Pass-through delegate methods ------------------//
-
- public Map getAttributes() {
- return delegate.getAttributes();
- }
-
- public PartialViewContext getPartialViewContext() {
- return delegate.getPartialViewContext();
- }
-
- public List getMessageList() {
- return delegate.getMessageList();
- }
-
- public List getMessageList(String clientId) {
- return delegate.getMessageList(clientId);
- }
-
- public boolean isPostback() {
- return delegate.isPostback();
- }
-
- public PhaseId getCurrentPhaseId() {
- return delegate.getCurrentPhaseId();
- }
-
- public void setCurrentPhaseId(PhaseId currentPhaseId) {
- delegate.setCurrentPhaseId(currentPhaseId);
- }
-
- public ExceptionHandler getExceptionHandler() {
- return delegate.getExceptionHandler();
- }
-
- public boolean isProcessingEvents() {
- return delegate.isProcessingEvents();
- }
-
- public boolean isProjectStage(ProjectStage stage) {
- return delegate.isProjectStage(stage);
- }
-
- public boolean isValidationFailed() {
- return delegate.isValidationFailed();
- }
-
- public void setExceptionHandler(ExceptionHandler exceptionHandler) {
- delegate.setExceptionHandler(exceptionHandler);
- }
-
- public void setProcessingEvents(boolean processingEvents) {
- delegate.setProcessingEvents(processingEvents);
- }
-
- public void validationFailed() {
- delegate.validationFailed();
- }
-
- // ------------------ Private helper methods ----------------------//
-
- private class FlowExternalContext extends ExternalContextWrapper {
+ protected class FlowExternalContext extends ExternalContextWrapper {
private static final String CUSTOM_RESPONSE = "customResponse";
diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/Jsf2FlowFacesContext.java b/spring-faces/src/main/java/org/springframework/faces/webflow/Jsf2FlowFacesContext.java
new file mode 100644
index 00000000..4d9f5cb1
--- /dev/null
+++ b/spring-faces/src/main/java/org/springframework/faces/webflow/Jsf2FlowFacesContext.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright 2004-2010 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.faces.webflow;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.util.List;
+import java.util.Map;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.application.ProjectStage;
+import javax.faces.context.ExceptionHandler;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.context.Flash;
+import javax.faces.context.PartialViewContext;
+import javax.faces.event.PhaseId;
+
+import org.springframework.webflow.execution.RequestContext;
+
+/**
+ * Extends FlowFacesContext in order to provide JSF 2 delegation method. This is necessary because some of the methods
+ * use JSF 2 specific types as input or output parameters.
+ *
+ * @author Rossen Stoyanchev
+ */
+public class Jsf2FlowFacesContext extends FlowFacesContext {
+
+ public Jsf2FlowFacesContext(RequestContext context, FacesContext delegate) {
+ super(context, delegate);
+ }
+
+ public ExternalContext getExternalContext() {
+ return new Jsf2FlowExternalContext(getDelegate().getExternalContext());
+ }
+
+ // --------------- JSF 2.0 Pass-through delegate methods ------------------//
+
+ public Map