diff --git a/build-spring-webflow/resources/changelog.txt b/build-spring-webflow/resources/changelog.txt index f27d0ded..34c34041 100644 --- a/build-spring-webflow/resources/changelog.txt +++ b/build-spring-webflow/resources/changelog.txt @@ -4,6 +4,8 @@ http://www.springframework.org/webflow Changes in version 2.3.1.RELEASE ----------------------------------------------- +Upgrade JSF Mojarra version to 2.1.7 +Improve Jsf2FlowFacesContext.isValidationFailed() to check Web Flow's MessageContext for errors Changes in version 2.3.0.RELEASE (Feb 28, 2011) diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContextMessageDelegate.java b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContextMessageDelegate.java index 04a34f6a..5c90b05d 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContextMessageDelegate.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/FlowFacesContextMessageDelegate.java @@ -61,6 +61,13 @@ public class FlowFacesContextMessageDelegate { this.context = context; } + /** + * Whether Web Flow's MessageContext contains any errors. + */ + public boolean hasErrorMessages() { + return context.getMessageContext().hasErrorMessages(); + } + /** * @see FlowFacesContext#addMessage(String, FacesMessage) */ 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 index 4e644c43..eee23d44 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/Jsf2FlowFacesContext.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/Jsf2FlowFacesContext.java @@ -112,7 +112,11 @@ public class Jsf2FlowFacesContext extends FlowFacesContext { } public boolean isValidationFailed() { - return getDelegate().isValidationFailed(); + if (getMessageDelegate().hasErrorMessages()) { + return true; + } else { + return getDelegate().isValidationFailed(); + } } public void setExceptionHandler(ExceptionHandler exceptionHandler) { diff --git a/spring-faces/src/test/java/org/springframework/faces/webflow/FlowFacesContextTests.java b/spring-faces/src/test/java/org/springframework/faces/webflow/FlowFacesContextTests.java index ba4ced67..ea15bf0d 100644 --- a/spring-faces/src/test/java/org/springframework/faces/webflow/FlowFacesContextTests.java +++ b/spring-faces/src/test/java/org/springframework/faces/webflow/FlowFacesContextTests.java @@ -27,15 +27,17 @@ public class FlowFacesContextTests extends TestCase { FacesContext facesContext; - RequestContext requestContext = (RequestContext) EasyMock.createMock(RequestContext.class); + RequestContext requestContext; MessageContext messageContext; MessageContext prepopulatedMessageContext; + @SuppressWarnings("cast") protected void setUp() throws Exception { jsf.setUp(); - facesContext = new FlowFacesContext(requestContext, jsf.facesContext()); + requestContext = (RequestContext) EasyMock.createMock(RequestContext.class); + facesContext = new Jsf2FlowFacesContext(requestContext, jsf.facesContext()); setupMessageContext(); } @@ -60,7 +62,6 @@ public class FlowFacesContextTests extends TestCase { assertEquals("foo", summaryMessage.getText()); Message detailMessage = messageContext.getMessagesBySource("foo_detail")[0]; assertEquals("bar", detailMessage.getText()); - } public final void testGetGlobalMessagesOnly() { @@ -262,6 +263,16 @@ public class FlowFacesContextTests extends TestCase { assertSame(facesContext, facesContext.getELContext().getContext(FacesContext.class)); } + public final void testValidationFailed() { + messageContext = new DefaultMessageContext(); + EasyMock.expect(requestContext.getMessageContext()).andStubReturn(messageContext); + EasyMock.replay(new Object[] { requestContext }); + + facesContext.addMessage("foo", new FacesMessage(FacesMessage.SEVERITY_ERROR, "foo", "bar")); + + assertEquals(true, facesContext.isValidationFailed()); + } + private void setupMessageContext() { prepopulatedMessageContext = new DefaultMessageContext(); prepopulatedMessageContext.addMessage(new MessageBuilder().source("null_summary").defaultText("foo").info()