Revision: 1715 http://svn.sourceforge.net/spring-rich-c/?rev=1715&view=rev Author: jhoskens Date: 2007-02-13 03:51:29 -0800 (Tue, 13 Feb 2007)
Log Message: ----------- FormGuard should listen to errors of formModel, not directly on the validationResults DefaultFormModel registers listeners on it's children to check on errors Modified Paths: -------------- trunk/spring-richclient/support/src/main/java/org/springframework/binding/form/support/DefaultFormModel.java trunk/spring-richclient/support/src/main/java/org/springframework/richclient/form/FormGuard.java Modified: trunk/spring-richclient/support/src/main/java/org/springframework/binding/form/support/DefaultFormModel.java =================================================================== --- trunk/spring-richclient/support/src/main/java/org/springframework/binding/form/support/DefaultFormModel.java 2007-02-13 08:46:09 UTC (rev 1714) +++ trunk/spring-richclient/support/src/main/java/org/springframework/binding/form/support/DefaultFormModel.java 2007-02-13 11:51:29 UTC (rev 1715) @@ -23,6 +23,7 @@ import org.springframework.binding.MutablePropertyAccessStrategy; import org.springframework.binding.form.BindingErrorMessageProvider; import org.springframework.binding.form.FormModel; +import org.springframework.binding.form.HierarchicalFormModel; import org.springframework.binding.form.ValidatingFormModel; import org.springframework.binding.validation.RichValidator; import org.springframework.binding.validation.ValidationMessage; @@ -63,11 +64,20 @@ private boolean validating = true; private boolean oldValidating = true; + + private boolean oldHasErrors = false; private Validator validator; private BindingErrorMessageProvider bindingErrorMessageProvider = new DefaultBindingErrorMessageProvider(); + private final PropertyChangeListener errorChangeHandler = new PropertyChangeListener(){ + + public void propertyChange(PropertyChangeEvent evt) + { + hasErrorsUpdated(); + }}; + public DefaultFormModel() { init(); } @@ -117,12 +127,7 @@ } }); - validationResultsModel.addPropertyChangeListener(ValidationResultsModel.HAS_ERRORS_PROPERTY, new PropertyChangeListener(){ - - public void propertyChange(PropertyChangeEvent evt) - { - committableUpdated(); - }}); + validationResultsModel.addPropertyChangeListener(ValidationResultsModel.HAS_ERRORS_PROPERTY, errorChangeHandler); } public boolean isValidating() { @@ -147,7 +152,21 @@ firePropertyChange(VALIDATING_PROPERTY, !validating, validating); } } + + public void addChild(HierarchicalFormModel child) + { + super.addChild(child); + if (child instanceof ValidatingFormModel) + child.addPropertyChangeListener(ValidationResultsModel.HAS_ERRORS_PROPERTY, errorChangeHandler); + } + public void removeChild(HierarchicalFormModel child) + { + if (child instanceof ValidatingFormModel) + child.removePropertyChangeListener(ValidationResultsModel.HAS_ERRORS_PROPERTY, errorChangeHandler); + super.removeChild(child); + } + public ValidationResultsModel getValidationResults() { return validationResultsModel; } @@ -168,6 +187,15 @@ return false; } + protected void hasErrorsUpdated() { + boolean hasErrors = getHasErrors(); + if (hasChanged(oldHasErrors, hasErrors)) { + oldHasErrors = hasErrors; + firePropertyChange(ValidationResultsModel.HAS_ERRORS_PROPERTY, !hasErrors, hasErrors); + committableUpdated(); + } + } + public void validate() { if (isValidating()) { validateAfterPropertyChanged(null); Modified: trunk/spring-richclient/support/src/main/java/org/springframework/richclient/form/FormGuard.java =================================================================== --- trunk/spring-richclient/support/src/main/java/org/springframework/richclient/form/FormGuard.java 2007-02-13 08:46:09 UTC (rev 1714) +++ trunk/spring-richclient/support/src/main/java/org/springframework/richclient/form/FormGuard.java 2007-02-13 11:51:29 UTC (rev 1715) @@ -83,8 +83,7 @@ this.formModel = formModel; this.formModel.addPropertyChangeListener(FormModel.ENABLED_PROPERTY, this); - this.formModel.getValidationResults().addPropertyChangeListener( - ValidationResultsModel.HAS_ERRORS_PROPERTY, this); + this.formModel.addPropertyChangeListener(ValidationResultsModel.HAS_ERRORS_PROPERTY, this); this.formModel.addPropertyChangeListener(FormModel.DIRTY_PROPERTY, this); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier. Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ spring-rich-c-cvs mailing list spring-rich-c-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/spring-rich-c-cvs