Example usage for org.apache.wicket.markup.html.form FormComponent setLabel

List of usage examples for org.apache.wicket.markup.html.form FormComponent setLabel

Introduction

In this page you can find the example usage for org.apache.wicket.markup.html.form FormComponent setLabel.

Prototype

@Override
public FormComponent<T> setLabel(IModel<String> labelModel) 

Source Link

Document

The value will be made available to the validator property by means of ${label}.

Usage

From source file:com.evolveum.midpoint.web.component.assignment.ACAttributeValuePanel.java

License:Apache License

private void initPanel(Form form) {
    ACValueConstructionDto dto = getModel().getObject();
    PrismPropertyDefinition definition = dto.getAttribute().getDefinition();
    boolean required = definition.getMinOccurs() > 0;

    InputPanel input = createTypedInputComponent(ID_INPUT, definition);
    for (FormComponent comp : input.getFormComponents()) {
        comp.setLabel(new PropertyModel(dto.getAttribute(), ACAttributeDto.F_NAME));
        comp.setRequired(required);//w w  w. ja  va2  s  .c  o m

        comp.add(new AjaxFormComponentUpdatingBehavior("onBlur") {
            @Override
            protected void onUpdate(AjaxRequestTarget target) {
            }
        });
    }

    add(input);

    AjaxLink addLink = new AjaxLink(ID_ADD) {

        @Override
        public void onClick(AjaxRequestTarget target) {
            addPerformed(target);
        }
    };
    add(addLink);
    addLink.add(new VisibleEnableBehaviour() {

        @Override
        public boolean isVisible() {
            return isAddVisible();
        }
    });

    AjaxLink removeLink = new AjaxLink(ID_REMOVE) {

        @Override
        public void onClick(AjaxRequestTarget target) {
            removePerformed(target);
        }
    };
    add(removeLink);
    removeLink.add(new VisibleEnableBehaviour() {

        @Override
        public boolean isVisible() {
            return isRemoveVisible();
        }
    });
}

From source file:com.evolveum.midpoint.web.component.prism.PrismValuePanel.java

License:Apache License

private InputPanel createInputComponent(String id, IModel<String> label, Form form) {
    ValueWrapper valueWrapper = model.getObject();
    ObjectWrapper objectWrapper = valueWrapper.getProperty().getContainer().getObject();
    PrismProperty property = valueWrapper.getProperty().getItem();
    boolean required = property.getDefinition().getMinOccurs() > 0;
    //enforcing required for user will be enabled later (MID-1048)
    if (UserType.class.isAssignableFrom(objectWrapper.getObject().getCompileTimeClass())) {
        required = false;//  ww  w .  jav  a2 s . c om
    }

    InputPanel component = createTypedInputComponent(id);

    //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) component.getBaseFormComponent());
    } else if (ActivationType.F_VALID_TO.equals(property.getElementName())) {
        DateValidator validator = getActivationRangeValidator(form, activation);
        validator.setDateTo((DateTimeField) component.getBaseFormComponent());
    }

    final List<FormComponent> formComponents = component.getFormComponents();
    for (FormComponent formComponent : formComponents) {
        formComponent.setLabel(label);
        formComponent.setRequired(required);

        if (formComponent instanceof TextField) {
            formComponent.add(new AttributeModifier("size", "42"));
        }
        formComponent.add(new AjaxFormComponentUpdatingBehavior("onBlur") {

            @Override
            protected void onUpdate(AjaxRequestTarget target) {
            }
        });

        // Validation occurs when submitting the form
        //            if (form != null) {
        //                AjaxFormValidatingBehavior validator = new AjaxFormValidatingBehavior(form, "onBlur"); 
        //                 
        //                formComponent.add(validator);
        //            }
    }
    return component;
}

From source file:com.googlecode.wicketwebbeans.model.ComponentRegistry.java

License:Apache License

/**
 * Associate label with FormComponents that are descendants of component. 
 *
 * @param propertyMeta//from  w  ww  .  j  av a 2s.  c  om
 * @param component
 */
private void associateLabelToFormComponents(final ElementMetaData propertyMeta, Component component) {
    if (component instanceof MarkupContainer) {
        MarkupContainer container = (MarkupContainer) component;
        container.visitChildren(FormComponent.class, new IVisitor<Component>() {
            public Object component(Component component) {
                FormComponent formComponent = (FormComponent) component;
                formComponent.setLabel(new Model(propertyMeta.getLabel()));
                formComponent.add(new ErrorHighlightingBehavior());
                return IVisitor.CONTINUE_TRAVERSAL;
            }
        });
    }
}

From source file:cz.zcu.kiv.eegdatabase.wui.components.utils.WicketUtils.java

License:Apache License

/**
 * Adds labels and feedback panels for input fields to the given form
 * The label ids are of the form <original id>.label
 * The feedback ids are of the form <original id>.feedback
 *
 * FormComponentPanel instances wont get a label or a feedback unless they
 * implement ISingleLabelFormComponentPanel interface.
 * If they do, their children dont get any labels or feedbacks.
 *
 * @param form/* ww w .  j  a va2 s  . c o m*/
 */
public static void addLabelsAndFeedback(Form<?> form) {
    final Set<String> ids = new HashSet<String>();
    final Map<String, MarkupContainer> parents = new HashMap<String, MarkupContainer>();
    final Map<String, ComponentFeedbackPanel> feedbacks = new HashMap<String, ComponentFeedbackPanel>();
    final Map<String, FormComponentLabel> labels = new HashMap<String, FormComponentLabel>();

    form.visitFormComponents(new IVisitor<FormComponent<?>, Void>() {

        @Override
        public void component(FormComponent<?> object, IVisit<Void> visit) {
            if (object instanceof FormComponent && !(object instanceof Button)
                    && object.findParent(FormComponentPanel.class) == null) {
                ids.add(object.getId());
                parents.put(object.getId(), object.getParent());
                //create a feedback panel for the component
                ComponentFeedbackPanel temp = new ComponentFeedbackPanel(object.getId() + ".feedback", object);
                temp.setVisible(object.isVisible()); //do not display component if field is not visible
                feedbacks.put(object.getId(), temp);

                if (object.isRequired()) {
                    String lab = object.getLabel().getObject();
                    object.setLabel(new Model<String>(lab.concat("*")));
                }
                FormComponentLabel lab = new MyFormComponentLabel(object.getId() + ".label", object);
                lab.setVisible(object.isVisible());
                labels.put(object.getId(), lab);
            }
        }
    });

    for (String id : ids) {
        parents.get(id).addOrReplace(labels.get(id));
        parents.get(id).addOrReplace(feedbacks.get(id));
    }
}

From source file:cz.zcu.kiv.eegdatabase.wui.ui.administration.components.ResearchGroupManagementForm.java

License:Apache License

/**
 * Handles adding content components to container (e.g. a form)
 * @param f container the components will be added to
 *//*from   w ww .jav  a  2s . c o  m*/
private void addContent(WebMarkupContainer f) {
    FormComponent cmp = new CheckBox("paidAccount", new PropertyModel<Boolean>(this.groupModel, "paidAccount"));
    cmp.setLabel(ResourceUtils.getModel("label.paidAccount"));

    f.add(cmp);

    final TextField<String> title = new TextField<String>("title",
            new PropertyModel<String>(this.groupModel, "title"));
    title.setRequired(true);
    title.setLabel(ResourceUtils.getModel("label.researchGroupTitle"));
    title.add(StringValidator.maximumLength(100));

    final TextArea<String> description = new TextArea<String>("description",
            new PropertyModel<String>(this.groupModel, "description"));
    description.setRequired(true);
    description.setLabel(ResourceUtils.getModel("label.researchGroupDescription"));
    description.add(StringValidator.maximumLength(250));

    CheckBox lockCheckBox = new CheckBox("lock", new PropertyModel<Boolean>(this.groupModel, "lock"));
    lockCheckBox.setLabel(ResourceUtils.getModel("label.lock"));
    f.add(lockCheckBox);

    f.add(title, description);

    this.addControls(f);
}

From source file:cz.zcu.kiv.eegdatabase.wui.ui.licenses.components.LicenseRequestForm.java

License:Apache License

private void addComponents() {
    FormComponent c = new RequiredTextField("firstName", new PropertyModel(persLicense, "firstName"));
    c.setLabel(ResourceUtils.getModel("label.license.request.firstname"));
    form.add(c);/*  w ww  .  j a  v a 2  s .  co m*/

    c = new RequiredTextField("lastName", new PropertyModel(persLicense, "lastName"));
    c.setLabel(ResourceUtils.getModel("label.license.request.lastname"));
    form.add(c);

    c = new RequiredTextField("organisation", new PropertyModel(persLicense, "organisation"));
    c.setLabel(ResourceUtils.getModel("label.license.request.organisation"));
    form.add(c);

    c = new RequiredTextField("email", new PropertyModel(persLicense, "email"));
    c.add(EmailAddressValidator.getInstance());
    c.setLabel(ResourceUtils.getModel("label.license.request.email"));
    form.add(c);

    uploadField = new FileUploadField("attachement");
    uploadField.setLabel(ResourceUtils.getModel("label.license.request.attachement"));
    form.add(uploadField);
    form.setMaxSize(Bytes.megabytes(15));

    WicketUtils.addLabelsAndFeedback(form);
}

From source file:cz.zcu.kiv.eegdatabase.wui.ui.licenses.components.PersonalLicenseRejectPanel.java

License:Apache License

private void addComponents() {
    FormComponent c = new TextArea("resolutionComment",
            new PropertyModel(applicationModel, "resolutionComment"));
    c.setLabel(ResourceUtils.getModel("label.license.request.resolution"));
    form.add(c);/*from   w  ww  . j  ava  2  s.co  m*/

    WicketUtils.addLabelsAndFeedback(form);
}

From source file:gr.abiss.calipso.wicket.asset.AssetFormCustomAttributePanel.java

License:Open Source License

@SuppressWarnings("unchecked")
private Component renderAttribute(KeyValuePair attributeEntry) {
    FormComponent formComponent = null;
    Component fragment = null;/*from   w  ww  . ja v  a2  s.  c o  m*/

    if (attributeValueList == null) {
        attributeValueList = new LinkedList<AttributeValue>();
    }

    AssetTypeCustomAttribute attribute = (AssetTypeCustomAttribute) attributeEntry.getKey();
    String sValue = (String) attributeEntry.getValue();
    // Drop-Down Field
    if (attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_SELECT)) {

        //logger.info("PROCESSING simple select attribute: "+attribute.getName());
        fragment = new Fragment("customAttributes", "dropDownField", this);
        final List<CustomAttributeLookupValue> lookupValues = getCalipso()
                .findAllLookupValuesByCustomAttribute(attribute);
        // TODO: move this into a LookupValueDropDownChoice class
        if (attribute.getLookupValue() == null) {
            String defaultStringValue = attribute.getDefaultStringValue();
            if (defaultStringValue != null && CollectionUtils.isNotEmpty(lookupValues)) {
                for (CustomAttributeLookupValue value : lookupValues) {
                    if (value.getValue().equals(defaultStringValue)) {
                        attribute.setLookupValue(value);
                        break;
                    }
                }
            }

        }
        //logger.info("LOADED simple select attribute options: "+lookupValues);
        DropDownChoice fieldValueChoice = new DropDownChoice("customAttribute.allowedLookupValues.id",
                new PropertyModel(attribute, "lookupValue"), lookupValues, new IChoiceRenderer() {
                    public Object getDisplayValue(Object o) {
                        return ((CustomAttributeLookupValue) o).getValue();
                    }

                    public String getIdValue(Object o, int i) {
                        return i + "";
                    }
                });
        fieldValueChoice.setNullValid(!attribute.isMandatory() || isSearchMode);
        attributeValueList.add(new AttributeValue(fieldValueChoice, attribute));
        // for all-cases-logic to apply later on, i.e. set mandatory, labels etc.
        formComponent = fieldValueChoice;
    }
    // hierarchical select
    else if (attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_OPTIONS_TREE)) {
        fragment = new Fragment("customAttributes", "treeField", this);
        logger.info("PROCESSING tree select attribute: " + attribute.getName());
        List<CustomAttributeLookupValue> customAttributeLookupValues = getCalipso()
                .findLookupValuesByCustomAttribute(attribute);
        TreeChoice treeChoice = new TreeChoice("customAttribute.allowedLookupValues.id",
                new PropertyModel(attribute, "lookupValue"), customAttributeLookupValues, attribute);
        treeChoice.setType(CustomAttributeLookupValue.class);
        attributeValueList.add(new AttributeValue(treeChoice, attribute));
        // for all-cases-logic to apply later on, i.e. set mandatory, labels etc.
        formComponent = treeChoice;
    }
    // User
    else if (attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_USER)) {
        fragment = new Fragment("customAttributes", "dropDownFragment", this);
        if (allVisibleUsers == null) {
            allVisibleUsers = getCalipso().findAllUsers();
        }
        DropDownChoice userChoice = new DropDownChoice("attributeValue",
                new PropertyModel(attribute, "userValue"), allVisibleUsers, new UserChoiceRenderer());
        userChoice.setEscapeModelStrings(false);
        attributeValueList.add(new AttributeValue(userChoice, attribute));
        // for all-cases-logic to apply later on, i.e. set mandatory, labels etc.
        formComponent = userChoice;
    }
    // Organization
    else if (attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_ORGANIZATION)) {
        fragment = new Fragment("customAttributes", "dropDownFragment", this);
        if (allVisibleOrganizations == null) {
            allVisibleOrganizations = getCalipso().findAllOrganizations();
        }
        DropDownChoice organizationChoice = new DropDownChoice("attributeValue",
                new PropertyModel(attribute, "organizationValue"), allVisibleOrganizations,
                new IChoiceRenderer() {
                    public Object getDisplayValue(Object object) {
                        Organization organization = (Organization) object;
                        return organization.getName();
                    }

                    public String getIdValue(Object object, int index) {
                        // TODO Auto-generated method stub
                        return index + "";
                    }
                });
        attributeValueList.add(new AttributeValue(organizationChoice, attribute));
        // for all-cases-logic to apply later on, i.e. set mandatory, labels etc.
        formComponent = organizationChoice;
    }
    // Country
    else if (attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_COUNTRY)) {
        fragment = new Fragment("customAttributes", "dropDownFragment", this);
        if (allVisibleCountries == null) {
            allVisibleCountries = getCalipso().findAllCountries();
        }
        DropDownChoice countryChoice = getCountriesDropDown("attributeValue", allVisibleCountries);
        countryChoice.setModel(new PropertyModel(attribute, "countryValue"));
        attributeValueList.add(new AttributeValue(countryChoice, attribute));
        // for all-cases-logic to apply later on, i.e. set mandatory, labels etc.
        formComponent = countryChoice;
    }
    // Asset (as custom attribute value)
    else if (attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_ASSET)) {
        fragment = new Fragment("customAttributes", "dropDownFragment", this);
        // TODO: Check allVisibleAssets to get proper assets
        if (allVisibleAssets == null) {
            allVisibleAssets = (List<Asset>) getCalipso().getVisibleAssetsForSpace(getCurrentSpace());
        }
        DropDownChoice assetChoice = new DropDownChoice("attributeValue",
                new PropertyModel(attribute, "assetValue"), allVisibleAssets, new IChoiceRenderer() {
                    public Object getDisplayValue(Object object) {
                        Asset asset = (Asset) object;
                        return new StringBuffer(asset.getInventoryCode()).append("(")
                                .append(asset.getAssetType().getName()).append(", ")
                                .append(asset.getSpace().getName()).append(")");
                    }

                    public String getIdValue(Object object, int index) {
                        return index + "";
                    }

                });
        attributeValueList.add(new AttributeValue(assetChoice, attribute));
        // for all-cases-logic to apply later on, i.e. set mandatory, labels etc.
        formComponent = assetChoice;
    }

    // Text Field or Number Field
    else if (attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_TEXT)
            || attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_NUMBER)) {
        fragment = new Fragment("customAttributes", "textField", this);
        TextField textField = new TextField("attributeValue", new Model(sValue));
        if (attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_NUMBER)) {
            textField.setType(Double.class);
        } else {// is type text
            String regexp = attribute.getValidationExpression().getExpression();
            if (!regexp.equals(RegexpValidator.NO_VALIDATION)) {
                textField.add(new PatternValidator(regexp));
            }
        }
        attributeValueList.add(new AttributeValue(textField, attribute));
        // for all-cases-logic to apply later on, i.e. set mandatory, labels etc.
        formComponent = textField;
    } // if

    // Date field
    else if (attribute.getFormType().equals(AssetTypeCustomAttribute.FORM_TYPE_DATE)) {
        //AssetCustomAttributeDateValue dateValue = new AssetCustomAttributeDateValue(
        //      attributeValue);
        YuiCalendar calendar = new YuiCalendar("customAttributes",
                //new PropertyModel(new Model(dateValue), "value"),
                new Model(), attribute.isMandatory() && !isSearchMode);
        calendar.add(new ErrorHighlighter());
        attributeValueList.add(new AttributeValue(calendar, attribute));
        fragment = calendar;
    }
    // else nothing
    else {
        fragment = new WebMarkupContainer("customAttributes");
    }
    // configure common validation/label etc. if applicable
    logger.info("Fragment: " + fragment + ", formcomponent: " + formComponent + ", attribute: "
            + attribute.getName());
    if (formComponent != null) {
        if (fragment instanceof Fragment) {
            //logger.info("fragment.add attribute: "+attribute.getName()+", form component: "+formComponent);
            ((Fragment) fragment).add(formComponent);
        }
        formComponent.setRequired(attribute.isMandatory() && !isSearchMode);
        formComponent.add(new ErrorHighlighter());
        formComponent.setLabel(new ResourceModel(attribute.getNameTranslationResourceKey()));
    }

    return fragment;
}

From source file:gr.abiss.calipso.wicket.BasePanel.java

License:Open Source License

protected FormComponent<?> setUpAndAdd(FormComponent<?> field, WebMarkupContainer container) {
    field.add(new ErrorHighlighter());
    container.add(field.setLabel(new ResourceModel(field.getId())));
    container.add(new SimpleFormComponentLabel(field.getId() + "Label", field));
    return field;
}

From source file:gr.abiss.calipso.wicket.CustomFieldsFormPanel.java

License:Open Source License

@SuppressWarnings("serial")
private void addComponents(final CompoundPropertyModel model, final Metadata metadata, final List<Field> fields,
        final Map<String, FileUploadField> fileUploadFields) {
    //final AbstractItem item = (AbstractItem) model.getObject();
    List<FieldGroup> fieldGroupsList = metadata.getFieldGroups();
    @SuppressWarnings("unchecked")
    ListView fieldGroups = new ListView("fieldGroups", fieldGroupsList) {

        @Override/*from  ww w  .ja va 2 s.c om*/
        protected void populateItem(ListItem listItem) {
            FieldGroup fieldGroup = (FieldGroup) listItem.getModelObject();
            listItem.add(new Label("fieldGroupLabel", fieldGroup.getName()));
            List<Field> groupFields = fieldGroup.getFields();
            List<Field> editableGroupFields = new LinkedList<Field>();

            if (CollectionUtils.isNotEmpty(groupFields)) {
                for (Field field : groupFields) {
                    // is editable?
                    if (fields.contains(field)) {
                        editableGroupFields.add(field);
                    }
                }
            }
            ListView listView = new ListView("fields", editableGroupFields) {

                @Override
                @SuppressWarnings("deprecation")
                protected void populateItem(ListItem listItem) {
                    boolean preloadExistingValue = true;
                    final Field field = (Field) listItem.getModelObject();
                    // preload custom attribute
                    if (field.getCustomAttribute() == null) {
                        field.setCustomAttribute(getCalipso().loadItemCustomAttribute(getCurrentSpace(),
                                field.getName().getText()));
                    }
                    // preload value?
                    if (preloadExistingValue) {
                        AbstractItem history = (AbstractItem) model.getObject();
                        history.setValue(field.getName(), item.getValue(field.getName()));
                    }
                    // return the value for the field (see abstract item getCustomValue method)
                    Object fieldLastCustomValue = null;

                    String i18nedFieldLabelResourceKey = item.getSpace()
                            .getPropertyTranslationResourceKey(field.getName().getText());

                    if (item != null && !editMode) {
                        if (field.getName().isFile()) {
                            Set<Attachment> tmpAttachments = item.getAttachments();
                            if (tmpAttachments != null && tmpAttachments.size() > 0) {
                                for (Attachment attachment : tmpAttachments) {
                                    if (field.getLabel()
                                            .equals(AttachmentUtils.getBaseName(attachment.getFileName()))) {
                                        fieldLastCustomValue = attachment.getFileName();
                                        break;
                                    }
                                }
                            }

                        } else {
                            fieldLastCustomValue = item.getValue(field.getName());
                        }

                    }

                    // Decide whether the field is mandatory

                    boolean valueRequired = false;
                    //logger.info("fieldLastCustomValue for field " + field.getLabel() +": "+fieldLastCustomValue);
                    if (field.getMask() == State.MASK_MANDATORY
                            || (field.getMask() == State.MASK_MANDATORY_IF_EMPTY
                                    && (fieldLastCustomValue == null
                                            || StringUtils.isBlank(fieldLastCustomValue.toString())))) {
                        valueRequired = true; // value required
                    }

                    // go over custom fields
                    WebMarkupContainer labelContainer = new WebMarkupContainer("labelContainer");
                    listItem.add(labelContainer);

                    SimpleFormComponentLabel label = null;
                    if (field.getName().isDropDownType()) {
                        String autoValue;
                        final Map<String, String> options = field.getOptions();
                        if (field.getFieldType().equals(Field.FIELD_TYPE_DROPDOWN_HIERARCHICAL)) {
                            Fragment f = new Fragment("field", "treeField", CustomFieldsFormPanel.this);
                            // add HTML description through velocity
                            addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                                    field.getCustomAttribute().getHtmlDescription(), null, true);
                            ItemFieldCustomAttribute customAttribute = field.getCustomAttribute();
                            //                        if(customAttribute == null){
                            //                           customAttribute = getCalipso().loadCustomAttribute(getCurrentSpace(), field.getName().getText());
                            //                           field.setCustomAttribute(customAttribute);
                            //                        }

                            // preload existing value
                            if (field.getCustomAttribute() != null && customAttribute.getLookupValue() == null
                                    && item.getCustomValue(field) != null) {
                                logger.info("preloading custom attribute for field: " + field.getLabel());
                                customAttribute.setLookupValue(getCalipso().loadCustomAttributeLookupValue(
                                        NumberUtils.createLong(item.getCustomValue(field).toString())));
                                customAttribute.setAllowedLookupValues(
                                        getCalipso().findActiveLookupValuesByCustomAttribute(customAttribute));
                            } else {
                                logger.info(
                                        "SKIPPED preloading custom attribute for field: " + field.getLabel());
                                customAttribute.setAllowedLookupValues(
                                        getCalipso().findActiveLookupValuesByCustomAttribute(customAttribute));
                            }
                            TreeChoice choice = new TreeChoice("field",
                                    new PropertyModel<CustomAttributeLookupValue>(field,
                                            "customAttribute.lookupValue"),
                                    customAttribute.getAllowedLookupValues(), customAttribute);

                            // TODO: temp, make configurable in space field form for 1520
                            int attrId = customAttribute.getId().intValue();
                            choice.setVisibleMenuLinks(
                                    attrId == 3 || attrId == 4 || attrId == 16 || attrId == 17);
                            //choice.setType(Long.class);
                            choice.setRequired(valueRequired);
                            // i18n
                            choice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));
                            WebMarkupContainer border = new WebMarkupContainer("border");
                            f.add(border);
                            //border.add(new ErrorHighlighter(choice));
                            border.add(choice);
                            //choice.setModel(model.bind(field.getName().getText()));
                            //border.add(model.bind(choice, field.getName().getText()));
                            listItem.add(f.setRenderBodyOnly(true));
                            label = new SimpleFormComponentLabel("label", choice);
                        }
                        // get the type of component that will render the choices
                        else if (field.getFieldType().equals(Field.FIELD_TYPE_AUTOSUGGEST)) {

                            renderAutoSuggest(model, listItem, field, i18nedFieldLabelResourceKey,
                                    valueRequired, options);

                        } else {
                            // normal drop down
                            label = renderDropDown(model, listItem, field, i18nedFieldLabelResourceKey,
                                    valueRequired, options);

                        }

                    } else if (field.getName().equals(Field.Name.ASSIGNABLE_SPACES)) {
                        Fragment f = new Fragment("field", "dropDown", CustomFieldsFormPanel.this);

                        // add HTML description through velocity
                        addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                                field.getCustomAttribute().getHtmlDescription(), null, true);

                        List assignableSpaces = loadAssignableSpaces(field);
                        final Map options = new LinkedHashMap();

                        // Replace value from space id to space description for
                        // reasons of appearance.
                        for (int i = 0; i < assignableSpaces.size(); i++) {
                            Space space = (Space) assignableSpaces.get(i);
                            if (!space.equals(getCurrentSpace())) {
                                options.put(space.getId(), localize(space.getNameTranslationResourceKey()));
                            } // if
                        } // for

                        final List keys = new ArrayList(options.keySet());

                        AssignableSpacesDropDownChoice choice = new AssignableSpacesDropDownChoice("field",
                                keys, new IChoiceRenderer() {
                                    @Override
                                    public Object getDisplayValue(Object o) {
                                        return o;
                                    };

                                    @Override
                                    public String getIdValue(Object o, int i) {
                                        return o.toString();
                                    };
                                });

                        choice.setNullValid(true);
                        // i18n
                        choice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));

                        choice.setRequired(valueRequired);
                        choice.add(new Behavior() {
                            @Override
                            public void renderHead(Component component, IHeaderResponse response) {
                                response.renderJavaScript(new JavaScripts().setAssignableSpacesId.asString(),
                                        "setAssignableSpacesId");
                            }
                        });
                        choice.add(new AjaxFormComponentUpdatingBehavior("onChange") {
                            @Override
                            protected void onUpdate(AjaxRequestTarget target) {
                                if (statusChoice != null
                                        && !statusChoice.getDefaultModelObjectAsString().equals("")
                                        && !statusChoice.getDefaultModelObjectAsString().equals("-1")) {
                                    // if
                                    // (statusChoice.getValue().equals(String.valueOf(State.MOVE_TO_OTHER_SPACE))){
                                    // assignedToChoice.setChoices(getAssignableSpaceUsers());
                                    // assignedToChoice.setNullValid(false);
                                    // assignedToChoice.setVisible(true);
                                    // }//if
                                } // if
                                target.appendJavaScript("assignableSpacesId=" + "'"
                                        + assignableSpacesDropDownChoice.getMarkupId() + "';");
                                // This can happen at the creation of a new item
                                // where makes no sense to be moved to other space
                                if (assignedToChoice != null) {
                                    target.addComponent(assignedToChoice);
                                }
                            }// onUpdate

                            @Override
                            protected void onError(AjaxRequestTarget arg0, RuntimeException arg1) {
                                // Do nothing.
                                // It happens only if the choice be set to NULL by
                                // the user.
                                // The exception occurs because the model binds to
                                // space id that is from (primitive) type
                                // long and its value can not be set to NULL.
                            }

                        });

                        choice.setOutputMarkupId(true);
                        assignableSpacesDropDownChoice = choice;

                        if (itemViewFormPanel != null) {
                            itemViewFormPanel.getItemViewForm()
                                    .setAssignableSpacesDropDownChoice(assignableSpacesDropDownChoice);
                        } // if

                        WebMarkupContainer border = new WebMarkupContainer("border");
                        f.add(border);
                        border.add(new ErrorHighlighter(choice));
                        // Set field name explicitly to avoid runtime error
                        //border.add(model.bind(choice, field.getName() + ".id"));
                        choice.setModel(model.bind(field.getName() + ".id"));
                        border.add(choice);
                        listItem.add(f.setRenderBodyOnly(true));
                        border.setVisible(!CustomFieldsFormPanel.this.editMode);
                        label = new SimpleFormComponentLabel("label", choice);
                    } else if (field.getName().getType() == 6) {
                        // date picker
                        Fragment fragment = new Fragment("field", "dateFragment", CustomFieldsFormPanel.this);
                        // add HTML description through velocity
                        addVelocityTemplatePanel(fragment, "htmlDescriptionContainer", "htmlDescription",
                                field.getCustomAttribute().getHtmlDescription(), null, true);

                        if (item.getId() == 0 && item.getValue(field.getName()) == null
                                && field.getDefaultValueExpression() != null
                                && field.getDefaultValueExpression().equalsIgnoreCase("now")) {
                            item.setValue(field.getName(), new Date());
                        }
                        DateField calendar = new DateField("field",
                                preloadExistingValue
                                        ? new PropertyModel(model.getObject(), field.getName().getText())
                                        : new PropertyModel(model, field.getName().getText())) {

                            @Override
                            protected String getDateFormat() {
                                // TODO Auto-generated method stub
                                return metadata.getDateFormats().get(Metadata.DATE_FORMAT_SHORT);
                            }

                        };
                        calendar.setRequired(valueRequired);
                        // i8n
                        calendar.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));

                        fragment.add(calendar);
                        listItem.add(fragment.setRenderBodyOnly(true));
                        label = new SimpleFormComponentLabel("label", calendar);

                    }
                    // TODO: Creating new space item - users custom field
                    else if (field.getName().isOrganization()) { // is organization
                        // Get users list
                        Fragment f = new Fragment("field", "dropDownFragment", CustomFieldsFormPanel.this);
                        // add HTML description through velocity
                        addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                                field.getCustomAttribute().getHtmlDescription(), null, true);

                        Organization organization = (Organization) item.getValue(field.getName());
                        // logger.debug("Item organization field has value: "+organization);
                        final List<Organization> allOrganizationsList = getCalipso().findAllOrganizations();
                        DropDownChoice organizationChoice = new DropDownChoice("field", allOrganizationsList,
                                new IChoiceRenderer() {
                                    // user's choice renderer
                                    // display value user's name
                                    @Override
                                    public Object getDisplayValue(Object object) {
                                        return ((Organization) object).getName();
                                    }

                                    @Override
                                    public String getIdValue(Object object, int index) {
                                        // id value user's id
                                        return index + "";
                                    }
                                });

                        organizationChoice.add(new ErrorHighlighter());

                        organizationChoice.setRequired(valueRequired);
                        // i18n
                        organizationChoice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));
                        //f.add(model.bind(organizationChoice, field.getName().getText()));
                        organizationChoice.setModel(model.bind(field.getName().getText()));
                        f.add(organizationChoice);
                        listItem.add(f.setRenderBodyOnly(true));
                        label = new SimpleFormComponentLabel("label", organizationChoice);
                    }

                    else if (field.getName().isFile()) {
                        // File
                        addFileInputField(model, fileUploadFields, listItem, field, i18nedFieldLabelResourceKey,
                                valueRequired);

                    }
                    // TODO: Creating new space item - organizations custom field
                    else if (field.getName().isUser()) { // is user

                        Fragment f = new Fragment("field", "dropDownFragment", CustomFieldsFormPanel.this);
                        // add HTML description through velocity
                        addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                                field.getCustomAttribute().getHtmlDescription(), null, true);

                        // find organization id from field's options

                        String strOrgId = field.getOptions().get("organizationId");
                        Long orgId = Long.valueOf(strOrgId);
                        // load organization from database

                        Organization selectedOrg = getCalipso().loadOrganization(orgId);
                        // TODO: load all users from organization
                        // add new list of selected organizations
                        List<Organization> selectedOrganization = new ArrayList<Organization>();
                        // add selected organization
                        selectedOrganization.add(selectedOrg);

                        final List<User> usersFromOrganization = getCalipso()
                                .findUsersInOrganizations(selectedOrganization);

                        // TODO: dropdown of all organization

                        DropDownChoice usersFromOrganizationChoice = new DropDownChoice("field",
                                usersFromOrganization, new UserChoiceRenderer());
                        usersFromOrganizationChoice.setNullValid(false);
                        usersFromOrganizationChoice.setRequired(valueRequired);
                        // i18n
                        usersFromOrganizationChoice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));
                        //f.add(model.bind(usersFromOrganizationChoice, field.getName().getText()));
                        usersFromOrganizationChoice.setModel(model.bind(field.getName().getText()));
                        f.add(usersFromOrganizationChoice);
                        listItem.add(f.setRenderBodyOnly(true));
                        label = new SimpleFormComponentLabel("label", usersFromOrganizationChoice);

                    } else if (field.getName().isCountry()) {
                        // organization fragment holds a dropDown of countries
                        final List<Country> allCountriesList = getCalipso().findAllCountries();
                        Fragment f = new Fragment("field", "dropDownFragment", CustomFieldsFormPanel.this);
                        // add HTML description through velocity
                        addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                                field.getCustomAttribute().getHtmlDescription(), null, true);

                        listItem.add(f.setRenderBodyOnly(true));
                        DropDownChoice countryChoice = getCountriesDropDown("field", allCountriesList);
                        countryChoice.add(new ErrorHighlighter());

                        countryChoice.setRequired(valueRequired);
                        // i18n
                        countryChoice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));

                        //f.add(model.bind(countryChoice, field.getName().getText()));
                        countryChoice.setModel(model.bind(field.getName().getText()));
                        f.add(countryChoice);
                        label = new SimpleFormComponentLabel("label", countryChoice);

                    }

                    else {
                        if (logger.isDebugEnabled())
                            logger.debug("model.getObject(): " + model.getObject());
                        if (logger.isDebugEnabled())
                            logger.debug(
                                    "model.getObject().getClass(): " + model.getObject().getClass().getName());
                        if (logger.isDebugEnabled())
                            logger.debug("field.getName().getText(): " + field.getName().getText());
                        //if(logger.isDebugEnabled()) logger.debug("((Item)model.getObject()).getCusStr01(): "+((Item)model.getObject()).getCusStr01());
                        FormComponent textField;
                        Fragment f;

                        if (field.isMultivalue()) {
                            f = new Fragment("field", "multipleValuesTextField", CustomFieldsFormPanel.this);
                            // add HTML description through velocity
                            addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                                    field.getCustomAttribute().getHtmlDescription(), null, true);

                            if (logger.isDebugEnabled())
                                logger.debug("model.getObject(): " + model.getObject());
                            if (logger.isDebugEnabled())
                                logger.debug("field.getName().getText(): " + field.getName().getText());
                            textField = preloadExistingValue
                                    ? new MultipleValuesTextField("field",
                                            new PropertyModel(model.getObject(), field.getName().getText()),
                                            field.getXmlConfig())
                                    : new MultipleValuesTextField("field", field.getXmlConfig());
                        } else if (field.getLineCount() == 1) {
                            f = new Fragment("field", "textField", CustomFieldsFormPanel.this);
                            // add HTML description through velocity
                            addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                                    field.getCustomAttribute().getHtmlDescription(), null, true);
                            textField = preloadExistingValue
                                    ? new TextField("field",
                                            new PropertyModel(model.getObject(), field.getName().getText()))
                                    : new TextField("field");
                        } else {
                            f = new Fragment("field", "textareaField", CustomFieldsFormPanel.this);
                            // add HTML description through velocity
                            addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                                    field.getCustomAttribute().getHtmlDescription(), null, true);
                            textField = preloadExistingValue ? new TextArea("field",
                                    new PropertyModel(model.getObject(), field.getName().getText())) {
                                @Override
                                protected void onComponentTag(ComponentTag tag) {
                                    super.onComponentTag(tag);
                                    tag.put("rows", field.getLineCount().toString());
                                }
                            } : new TextArea("field") {
                                @Override
                                protected void onComponentTag(ComponentTag tag) {
                                    super.onComponentTag(tag);
                                    tag.put("rows", field.getLineCount().toString());
                                }
                            };
                        }

                        // any validations for this field?
                        ValidationExpression validationExpression = getCalipso()
                                .loadValidationExpression(field.getValidationExpressionId());
                        if (validationExpression != null) {
                            textField.add(new ValidationExpressionValidator(validationExpression));
                        }

                        // TODO: do we need these two?
                        if (field.getName().getType() == 4) {
                            textField.setType(Double.class);
                        } else if (field.getName().isDecimalNumber()) {
                            textField.add(new PositiveNumberValidator());
                        }

                        textField.add(new ErrorHighlighter());
                        textField.setRequired(valueRequired);
                        // i18n
                        textField.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));
                        if (preloadExistingValue) {
                            f.add(textField);
                        } else {
                            //f.add(model.bind(textField, field.getName().getText()));
                            textField.setModel(model.bind(field.getName().getText()));
                            f.add(textField);
                        }
                        // f.add(textField);
                        listItem.add(f.setRenderBodyOnly(true));
                        label = new SimpleFormComponentLabel("label", textField);

                        // styles
                        FieldUtils.appendFieldStyles(field.getXmlConfig(), textField);
                    }

                    // add label
                    labelContainer.add(label != null ? label : new Label("label", ""));
                    if (field.getCustomAttribute() != null
                            && StringUtils.isBlank(field.getCustomAttribute().getHtmlDescription())) {
                        labelContainer.add(new SimpleAttributeModifier("class", "labelContainer"));
                    }
                    // mandatory?

                    // mark as mandatory in the UI?
                    labelContainer
                            .add(new Label("star", valueRequired ? "* " : " ").setEscapeModelStrings(false));
                }

                private SimpleFormComponentLabel renderAutoSuggest(final IModel model, ListItem listItem,
                        final Field field, String i18nedFieldLabelResourceKey, boolean valueRequired,
                        final Map<String, String> options) {
                    SimpleFormComponentLabel label = null;
                    Fragment f = new Fragment("field", "autoCompleteFragment", CustomFieldsFormPanel.this);
                    // add HTML description through velocity
                    addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                            field.getCustomAttribute().getHtmlDescription(), null, true);

                    final List<String> autoKeys = new ArrayList<String>(
                            options != null ? new ArrayList<String>(options.keySet())
                                    : new ArrayList<String>());

                    // the autocomplet textField
                    // TODO: fix to render values instead of integer
                    AbstractAutoCompleteRenderer autoRenderer = new AbstractAutoCompleteRenderer() {

                        @Override
                        protected String getTextValue(Object object) {
                            // TODO Auto-generated method stub
                            return object.toString();
                        }

                        @Override
                        protected void renderChoice(Object object, Response response, String criteria) {
                            response.write(object.toString());
                        }

                    };

                    autoTextField = new AutoCompleteTextField("field",
                            new PropertyModel(field, "customAttribute.lookupValue")) {

                        // TODO: the list
                        @Override
                        protected Iterator<String> getChoices(String input) {

                            if (Strings.isEmpty(input)) {
                                List<String> emptyList = Collections.emptyList();
                                return emptyList.iterator();
                            }
                            List<String> searchResults = new ArrayList<String>();

                            for (String s : options.values()) {
                                if (s.startsWith(input)) {
                                    searchResults.add(s);
                                }
                            }
                            return searchResults.iterator();
                        }

                    };
                    autoTextField.add(new AjaxFormComponentUpdatingBehavior("onchange") {

                        @Override
                        protected void onUpdate(AjaxRequestTarget target) {
                            // TODO Auto-generated method stub
                            List<String> searchResults = new ArrayList<String>();
                            for (String s : options.values()) {
                                if (s.startsWith((String) autoTextField.getModelObject())) {
                                    searchResults.add(s);
                                }
                            }
                            target.addComponent(autoTextField);
                        }
                    });
                    // i18n
                    autoTextField.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));
                    String componentValue = (String) ((autoTextField != null
                            && autoTextField.getModelObject() != null) ? autoTextField.getModelObject() : null);

                    autoTextField.setRequired(valueRequired);
                    WebMarkupContainer border = new WebMarkupContainer("border");
                    f.add(border);
                    border.add(new ErrorHighlighter(autoTextField));
                    autoTextField.setModel(new PropertyModel(model.getObject(), field.getName().getText()));
                    //border.add(model.bind(autoTextField, field.getName().getText()));
                    border.add(autoTextField);
                    if (logger.isDebugEnabled() && autoTextField != null
                            && autoTextField.getDefaultModelObjectAsString() != null) {
                        if (logger.isDebugEnabled())
                            logger.debug(
                                    "Auto complete value is :" + autoTextField.getDefaultModelObjectAsString());
                    }
                    listItem.add(f.setRenderBodyOnly(true));
                    label = new SimpleFormComponentLabel("label", autoTextField);
                    return label;

                    // -------------------------
                }

                private SimpleFormComponentLabel addFileInputField(final CompoundPropertyModel model,
                        final Map<String, FileUploadField> fileUploadFields, ListItem listItem,
                        final Field field, String i18nedFieldLabelResourceKey, boolean valueRequired) {
                    SimpleFormComponentLabel label = null;
                    Fragment f = new Fragment("field", "fileField", CustomFieldsFormPanel.this);
                    // add HTML description through velocity
                    addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                            field.getCustomAttribute().getHtmlDescription(), null, true);

                    FileUploadField fileField = new FileUploadField("field");
                    fileUploadFields.put(field.getLabel(), fileField);
                    fileField.add(new ErrorHighlighter());

                    fileField.setRequired(valueRequired);
                    // i18n
                    fileField.setLabel(new ResourceModel(
                            StringUtils.isNotBlank(i18nedFieldLabelResourceKey) ? i18nedFieldLabelResourceKey
                                    : Field.FIELD_TYPE_SIMPLE_ATTACHEMENT));//field.getName().getText().equalsIgnoreCase(Field.FIELD_TYPE_SIMPLE_ATTACHEMENT) ? Field.FIELD_TYPE_SIMPLE_ATTACHEMENT : i18nedFieldLabelResourceKey));

                    //f.add(model.bind(fileField, field.getName().getText()));
                    fileField.setModel(new Model());
                    // List<FileUpload> fileUploads = new LinkedList<FileUpload>();
                    f.add(fileField);
                    listItem.add(f.setRenderBodyOnly(true));
                    label = new SimpleFormComponentLabel("label", fileField);
                    return label;
                }

                /**
                 * @param model
                 * @param listItem
                 * @param field
                 * @param i18nedFieldLabelResourceKey
                 * @param valueRequired
                 * @param options
                 */
                private SimpleFormComponentLabel renderDropDown(final IModel model, ListItem listItem,
                        final Field field, String i18nedFieldLabelResourceKey, boolean valueRequired,
                        final Map<String, String> options) {
                    SimpleFormComponentLabel label = null;
                    /*
                     final List<CustomAttributeLookupValue> lookupValues = getCalipso().findLookupValuesByCustomAttribute(field.getCustomAttribute());
                          TreeChoice choice = new TreeChoice("field", new PropertyModel(field, "customAttribute.lookupValue"), lookupValues);
                          choice.setType(CustomAttributeLookupValue.class);
                          //choice.setType(Long.class);
                          choice.setRequired(valueRequired);
                          // i18n
                          choice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));
                          WebMarkupContainer border = new WebMarkupContainer("border");
                          f.add(border);
                          //border.add(new ErrorHighlighter(choice));
                          border.add(choice);
                                  
                     */

                    // drop down list
                    final Fragment fragment = new Fragment("field", "dropDown", CustomFieldsFormPanel.this);
                    if (field.getCustomAttribute() == null) {
                        field.setCustomAttribute(getCalipso().loadItemCustomAttribute(getCurrentSpace(),
                                field.getName().getText()));
                    }
                    // add HTML description through velocity
                    logger.info("field name:" + field.getName() + ", custom atribute: "
                            + field.getCustomAttribute());
                    addVelocityTemplatePanel(fragment, "htmlDescriptionContainer", "htmlDescription",
                            field.getCustomAttribute() != null ? field.getCustomAttribute().getHtmlDescription()
                                    : "",
                            null, true);

                    final List<CustomAttributeLookupValue> lookupValues = getCalipso()
                            .findActiveLookupValuesByCustomAttribute(field.getCustomAttribute());
                    // preselect previous user choice from DB if available
                    Object preselected = item.getValue(field.getName());
                    if (preselected != null) {
                        String sPreselectedId = preselected.toString();
                        if (CollectionUtils.isNotEmpty(lookupValues)) {
                            for (CustomAttributeLookupValue value : lookupValues) {
                                if ((value.getId() + "").equals(sPreselectedId)) {
                                    field.getCustomAttribute().setLookupValue(value);
                                    break;
                                }
                            }
                        }
                    }
                    // else set using the default string value instead, if any
                    // TODO: move this into a LookupValueDropDownChoice class
                    else {
                        String defaultStringValue = field.getCustomAttribute() != null
                                ? field.getCustomAttribute().getDefaultStringValue()
                                : null;
                        if (defaultStringValue != null && CollectionUtils.isNotEmpty(lookupValues)) {
                            for (CustomAttributeLookupValue value : lookupValues) {
                                if (value.getValue().equals(defaultStringValue)) {
                                    field.getCustomAttribute().setLookupValue(value);
                                    break;
                                }
                            }
                        }
                    }
                    DropDownChoice choice = new DropDownChoice("field",
                            new PropertyModel(field, "customAttribute.lookupValue"), lookupValues,
                            new IChoiceRenderer<CustomAttributeLookupValue>() {
                                @Override
                                public Object getDisplayValue(CustomAttributeLookupValue o) {
                                    return fragment.getString(o.getNameTranslationResourceKey());
                                }

                                @Override
                                public String getIdValue(CustomAttributeLookupValue o, int index) {
                                    return String.valueOf(index);
                                }
                            });
                    choice.setNullValid(true);

                    // i18n
                    choice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));
                    choice.setRequired(valueRequired);
                    WebMarkupContainer border = new WebMarkupContainer("border");
                    fragment.add(border);
                    border.add(new ErrorHighlighter(choice));
                    //border.add(model.bind(choice, field.getName().getText()));
                    border.add(choice);
                    listItem.add(fragment.setRenderBodyOnly(true));
                    label = new SimpleFormComponentLabel("label", choice);
                    return label;
                }

                /**
                 * @param model
                 * @param listItem
                 * @param field
                 * @param i18nedFieldLabelResourceKey
                 * @param valueRequired
                 * @param options
                 */
                private SimpleFormComponentLabel renderPeriodPartDropDown(final CompoundPropertyModel model,
                        ListItem listItem, final Field field, String i18nedFieldLabelResourceKey,
                        boolean valueRequired, final List<Date> options) {
                    SimpleFormComponentLabel label = null;
                    // drop down list
                    Fragment f = new Fragment("field", "dropDown", CustomFieldsFormPanel.this);

                    // add HTML description through velocity
                    addVelocityTemplatePanel(f, "htmlDescriptionContainer", "htmlDescription",
                            field.getCustomAttribute().getHtmlDescription(), null, true);

                    DropDownChoice choice = new DropDownChoice("field", options, new IChoiceRenderer() {
                        @Override
                        public Object getDisplayValue(Object o) {
                            return DateUtils.format((Date) o);
                        };

                        @Override
                        public String getIdValue(Object o, int i) {
                            return String.valueOf(i);
                        };
                    });
                    choice.setNullValid(true);
                    // i18n
                    choice.setLabel(new ResourceModel(i18nedFieldLabelResourceKey));
                    choice.setRequired(valueRequired);
                    WebMarkupContainer border = new WebMarkupContainer("border");
                    f.add(border);
                    border.add(new ErrorHighlighter(choice));
                    //border.add(model.bind(choice, field.getName().getText()));
                    choice.setModel(model.bind(field.getName().getText()));
                    border.add(choice);
                    listItem.add(f.setRenderBodyOnly(true));
                    label = new SimpleFormComponentLabel("label", choice);
                    return label;
                }
            };
            if (editableGroupFields.isEmpty()) {
                listItem.setVisible(false);
            }
            listView.setReuseItems(true);
            listItem.add(listView.setRenderBodyOnly(true));

        }

    };
    add(fieldGroups.setReuseItems(true));

    // 
}