@@ -972,6 +972,71 @@ public void withValidator_isAppliedIsEvaluated() {
972972 Assert .assertTrue (binder .isValid ());
973973 }
974974
975+ @ Test
976+ public void setApplyBindingsToHiddenFields_defaultsToFalse_appliesToHiddenFieldsWhenEnabled () {
977+ Binding <Person , String > nameBinding = binder .forField (nameField )
978+ .withValidator (name -> false , "" )
979+ .bind (Person ::getFirstName , Person ::setFirstName );
980+ binder .setBean (item );
981+
982+ assertFalse (binder .isApplyBindingsToHiddenFields ());
983+
984+ ((Component ) nameBinding .getField ()).setVisible (false );
985+ assertTrue ("Hidden field should be skipped by default" ,
986+ binder .isValid ());
987+
988+ binder .setApplyBindingsToHiddenFields (true );
989+ assertFalse (
990+ "Hidden field should be validated when applyBindingsToHiddenFields is true" ,
991+ binder .isValid ());
992+
993+ nameBinding .setIsAppliedPredicate (p -> false );
994+ assertTrue (
995+ "Per-binding predicate should override Binder-level applyBindingsToHiddenFields" ,
996+ binder .isValid ());
997+ }
998+
999+ @ Test
1000+ public void writeBean_applyBindingsToHiddenFields_writesHiddenFieldsWhenEnabled ()
1001+ throws ValidationException {
1002+ Binding <Person , String > nameBinding = binder .forField (nameField )
1003+ .bind (Person ::getFirstName , Person ::setFirstName );
1004+ binder .readBean (item );
1005+
1006+ nameField .setValue ("NewName" );
1007+ ((Component ) nameBinding .getField ()).setVisible (false );
1008+
1009+ binder .writeBean (item );
1010+ assertEquals ("Hidden field should not be written by default" ,
1011+ "Johannes" , item .getFirstName ());
1012+
1013+ binder .setApplyBindingsToHiddenFields (true );
1014+ binder .writeBean (item );
1015+ assertEquals (
1016+ "Hidden field should be written when applyBindingsToHiddenFields is true" ,
1017+ "NewName" , item .getFirstName ());
1018+ }
1019+
1020+ @ Test
1021+ public void writeBeanIfValid_applyBindingsToHiddenFields_writesHiddenFieldsWhenEnabled () {
1022+ Binding <Person , String > nameBinding = binder .forField (nameField )
1023+ .bind (Person ::getFirstName , Person ::setFirstName );
1024+ binder .readBean (item );
1025+
1026+ nameField .setValue ("NewName" );
1027+ ((Component ) nameBinding .getField ()).setVisible (false );
1028+
1029+ assertTrue (binder .writeBeanIfValid (item ));
1030+ assertEquals ("Hidden field should not be written by default" ,
1031+ "Johannes" , item .getFirstName ());
1032+
1033+ binder .setApplyBindingsToHiddenFields (true );
1034+ assertTrue (binder .writeBeanIfValid (item ));
1035+ assertEquals (
1036+ "Hidden field should be written when applyBindingsToHiddenFields is true" ,
1037+ "NewName" , item .getFirstName ());
1038+ }
1039+
9751040 @ Test
9761041 public void writeBean_isAppliedIsEvaluated () {
9771042 AtomicInteger invokes = new AtomicInteger ();
0 commit comments