diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowRenderKit.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowRenderKit.java index e0d89c10..2bafa153 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowRenderKit.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowRenderKit.java @@ -44,7 +44,7 @@ public class FlowRenderKit extends RenderKitWrapper { } private ResponseStateManager initResponseStateManager(ResponseStateManager wrapped) { - if (!JsfRuntimeInformation.isMyFacesInUse()) { + if (JsfRuntimeInformation.isMojarraPresent() && !JsfRuntimeInformation.isMyFacesInUse()) { return new FlowResponseStateManager(wrapped); } Constructor constructor; diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfRuntimeInformation.java b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfRuntimeInformation.java index 429548d5..d6a7ebd7 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfRuntimeInformation.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfRuntimeInformation.java @@ -71,6 +71,9 @@ public class JsfRuntimeInformation { } + private static final boolean mojarraPresent = + ClassUtils.isPresent("com.sun.faces.context.FacesContextImpl", CLASSLOADER); + private static final boolean myFacesPresent = ClassUtils.isPresent("org.apache.myfaces.webapp.MyFacesServlet", CLASSLOADER); @@ -109,6 +112,10 @@ public class JsfRuntimeInformation { } + public static boolean isMojarraPresent() { + return mojarraPresent; + } + public static boolean isMyFacesPresent() { return myFacesPresent; } diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfViewFactory.java b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfViewFactory.java index aaa25e42..864f83ff 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfViewFactory.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfViewFactory.java @@ -40,6 +40,7 @@ import org.springframework.webflow.execution.RequestContext; import org.springframework.webflow.execution.View; import org.springframework.webflow.execution.ViewFactory; +import static org.springframework.faces.webflow.JsfRuntimeInformation.isMojarraPresent; import static org.springframework.faces.webflow.JsfRuntimeInformation.isPortletRequest; /** @@ -162,7 +163,7 @@ public class JsfViewFactory implements ViewFactory { private void processTree(FacesContext context, UIComponent component) { Object mojarraTreeHandler = null; - if (!JsfRuntimeInformation.isMyFacesInUse()) { + if (isMojarraPresent() && !JsfRuntimeInformation.isMyFacesInUse()) { mojarraTreeHandler = new MojarraProcessTreeHandler().handleBefore(context, component); } diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/context/portlet/PortletExternalContextImpl.java b/spring-faces/src/main/java/org/springframework/faces/webflow/context/portlet/PortletExternalContextImpl.java index d2197982..5947eb4d 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/context/portlet/PortletExternalContextImpl.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/context/portlet/PortletExternalContextImpl.java @@ -127,11 +127,12 @@ public class PortletExternalContextImpl extends ExternalContext { } private Flash createFlash() { - if (JsfRuntimeInformation.isMyFacesInUse()) { - return new MyFacesFlashFactory().newFlash(this); - } else { + if (JsfRuntimeInformation.isMojarraPresent() && !JsfRuntimeInformation.isMyFacesInUse()) { return new MojarraFlashFactory().newFlash(this); } + else { + return new MyFacesFlashFactory().newFlash(this); + } } public void dispatch(String path) throws IOException {