private Panel createInputComponent(String id, IModel<String> labelModel, Form form) { ValueWrapper valueWrapper = valueWrapperModel.getObject(); ObjectWrapper objectWrapper = null; if (valueWrapper.getItem().getContainer() != null) { objectWrapper = valueWrapper.getItem().getContainer().getObject(); } Item property = valueWrapper.getItem().getItem(); boolean required = property.getDefinition().getMinOccurs() > 0; Panel component = createTypedInputComponent(id); if (component instanceof InputPanel) { InputPanel inputPanel = (InputPanel) component; // adding valid from/to date range validator, if necessary ItemPath activation = new ItemPath(UserType.F_ACTIVATION); if (ActivationType.F_VALID_FROM.equals(property.getElementName())) { DateValidator validator = getActivationRangeValidator(form, activation); validator.setDateFrom((DateTimeField) inputPanel.getBaseFormComponent()); } else if (ActivationType.F_VALID_TO.equals(property.getElementName())) { DateValidator validator = getActivationRangeValidator(form, activation); validator.setDateTo((DateTimeField) inputPanel.getBaseFormComponent()); } final List<FormComponent> formComponents = inputPanel.getFormComponents(); for (FormComponent formComponent : formComponents) { formComponent.setLabel(labelModel); formComponent.setRequired(required); if (formComponent instanceof TextField) { formComponent.add(new AttributeModifier("size", "42")); } formComponent.add( new AjaxFormComponentUpdatingBehavior("blur") { @Override protected void onUpdate(AjaxRequestTarget target) {} }); // Validation occurs when submitting the form // if (form != null) { // AjaxFormValidatingBehavior validator = new // AjaxFormValidatingBehavior(form, "Blur"); // // formComponent.add(validator); // } } } if (component == null) { throw new RuntimeException( "Cannot create input component for item " + property + " (" + valueWrapper + ") in " + objectWrapper); } return component; }
private DateValidator getActivationRangeValidator(Form form, ItemPath path) { DateValidator validator = null; List<DateValidator> validators = form.getBehaviors(DateValidator.class); if (validators != null) { for (DateValidator val : validators) { if (path.equivalent(val.getIdentifier())) { validator = val; break; } } } if (validator == null) { validator = new DateValidator(); validator.setIdentifier(path); form.add(validator); } return validator; }