Beispiel #1
0
  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;
  }