our app has a phone number field like ###-###-#### x###### on the page
<http://apache-wicket.1842946.n4.nabble.com/file/t375760/phone_number_fields.png>
 

We define a phone number class as FormComponentPanel in our app  like below 
public class PhoneFormComponent extends FormComponentPanel<PhoneNumberType>
{

        private static final long serialVersionUID = 1L;

        private TextField<String> areaField;
        private TextField<String> threeField;
        private TextField<String> fourField;
        private TextField<String> extField;
        private String area;
        private String three;
        private String four;
        private String ext;

        public PhoneFormComponent(String id, IModel<PhoneNumberType> phone) {
                super(id, phone);
                init();

        }

        private void init() {
                if (getModelObject() != null) {
                        if 
(StringUtils.isNotBlank(getModelObject().getNumber())) {
                                String phoneNumber = 
getModelObject().getNumber();
                                area = phoneNumber.substring(0, 3);
                                three = phoneNumber.substring(4, 7);
                                four = phoneNumber.substring(8, 12);
                        }
                        ext = getModelObject().getExtension();
                }
                add(areaField = new TextField<String>("area",
                                new PropertyModel<String>(this, "area")));
                areaField.add(new PatternValidator("\\d{3}")).setLabel(
                                new StringResourceModel("Phone", areaField, 
null));
                add(threeField = new TextField<String>("three",
                                new PropertyModel<String>(this, "three")));
                threeField.add(new PatternValidator("\\d{3}")).setLabel(
                                new StringResourceModel("Phone", threeField, 
null));
                add(fourField = new TextField<String>("four",
                                new PropertyModel<String>(this, "four")));
                fourField.add(new PatternValidator("\\d{4}")).setLabel(
                                new StringResourceModel("Phone", fourField, 
null));
                add(extField = new TextField<String>("ext", new 
PropertyModel<String>(
                                this, "ext")));
                extField.add(new PatternValidator("\\d{0,6}")).setLabel(
                                new StringResourceModel("Extension", extField, 
null));
                areaField.add(new INullAcceptingValidator<String>() {

                        /** Default serial id */
                        private static final long serialVersionUID = 1L;

                        @Override
                        public void validate(IValidatable<String> validatable) {
                                if 
(StringUtils.isNotBlank(areaField.getConvertedInput()) != StringUtils
                                                
.isNotBlank(threeField.getConvertedInput())
                                                && 
StringUtils.isNotBlank(threeField
                                                                
.getConvertedInput()) != StringUtils
                                                                
.isNotBlank(fourField.getConvertedInput())) {
                                        PhoneFormComponent.this.error(new 
ValidationError()
                                                        
.addMessageKey("Incomplete"));
                                }
                        }

                });
        }

        @Override
        protected void convertInput() {
                // note that earlier versions did override updateModel, which 
looked
                // somewhat better, but wasn't useful for when you want to do
                // validations with either normal validators or form validators
                PhoneNumberType phoneNumber = new PhoneNumberType();
                if (StringUtils.isNotBlank(areaField.getConvertedInput())
                                && 
StringUtils.isNotBlank(threeField.getConvertedInput())
                                && 
StringUtils.isNotBlank(fourField.getConvertedInput())) {
                        StringBuffer phoneString = new StringBuffer();
                        phoneString.append(areaField.getConvertedInput());
                        phoneString.append("-");
                        phoneString.append(threeField.getConvertedInput());
                        phoneString.append("-");
                        phoneString.append(fourField.getConvertedInput());
                        phoneNumber.setNumber(phoneString.toString());
                        phoneNumber.setExtension(extField.getConvertedInput());
                        setConvertedInput(phoneNumber);
                } else if (StringUtils.isNotBlank(areaField.getConvertedInput())
                                || 
StringUtils.isNotBlank(threeField.getConvertedInput())
                                || 
StringUtils.isNotBlank(fourField.getConvertedInput())) {
                        error(new 
ValidationError().addMessageKey("Incomplete"));
                        setConvertedInput(null);
                } else {
                        setConvertedInput(null);
                }
        }
             .....
           bypassing setter and getting
           ......

the component class uses the PatternValidator to implement validations

then in the panel class, cellPhone code is added as below :

PhoneFormComponent cellPhone = new PhoneFormComponent("cellPh",new
PropertyModel<PhoneNumberType>(targetModel, "cellPh"));
                certificationForm.add(cellPhone);
                certificationForm.add(new StyledFeedback("cellPhError",new 
ContainerFeedbackMessageFilter(cellPhone)));

then, since there are four textfields for phone number component, if a user
puts wrong characters on all of those fields, the feedback messages will
show up multiple times.

<http://apache-wicket.1842946.n4.nabble.com/file/t375760/wrong_validation_message.png>
 

Is there any way to override ContainerFeedbackMessageFilter so as to
restrict the message to be shown up only once ?



--
Sent from: http://apache-wicket.1842946.n4.nabble.com/Users-forum-f1842947.html

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to