Update Jsf2FlowFacesContext.isValidationFailed()

Previously isValidationFailed() merely delegated to the wrapped
FacesContext ignoring any errors that may have been added to
Web Flow's MessageContext. After the change isValidationFailed()
checks and returns true if the MessageContext contains errors
or otherwise it delegates.

Issues: SWF-1490
This commit is contained in:
Rossen Stoyanchev
2012-02-28 10:47:47 -05:00
parent f764120279
commit 85d8d73c1d
4 changed files with 28 additions and 4 deletions

View File

@@ -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)

View File

@@ -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)
*/

View File

@@ -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) {

View File

@@ -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()