Example usage for org.apache.wicket.ajax.form OnChangeAjaxBehavior OnChangeAjaxBehavior

List of usage examples for org.apache.wicket.ajax.form OnChangeAjaxBehavior OnChangeAjaxBehavior

Introduction

In this page you can find the example usage for org.apache.wicket.ajax.form OnChangeAjaxBehavior OnChangeAjaxBehavior.

Prototype

public OnChangeAjaxBehavior() 

Source Link

Document

Constructor.

Usage

From source file:org.onehippo.forge.settings.management.config.autoexport.AutoExportConfigPanel.java

License:Apache License

private void addModulesConfigurationToForm() {

    final WebMarkupContainer listContainer = new WebMarkupContainer("modulesContainer");
    //generate a markup-id so the contents can be updated through an AJAX call
    listContainer.setOutputMarkupId(true);

    final AutoExportConfig autoExportConfig = autoExportConfigModel.getObject();
    //final ArrayList<String> modulesList = autoExportConfig.getModules();
    ListView<String> modules = new ListView<String>("autoexport-modules",
            new PropertyModel(autoExportConfigModel, "modules")) {
        private static final long serialVersionUID = 1L;

        @Override/* w  w  w . j  av a2 s.c  o  m*/
        protected void populateItem(final ListItem<String> item) {
            RequiredTextField moduleField = new RequiredTextField("module", item.getModel());
            moduleField.setOutputMarkupId(true);
            moduleField.add(new OnChangeAjaxBehavior() {
                private static final long serialVersionUID = 1L;

                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                }
            });
            item.add(moduleField);

            AjaxSubmitLink remove = new AjaxSubmitLink("remove") {
                private static final long serialVersionUID = 1L;

                @Override
                protected void onSubmit(AjaxRequestTarget target, Form form) {
                    //modulesList.remove(item.getIndex());
                    //autoExportConfigModel.getObject().setModules(modulesList);
                    target.add(listContainer);
                }
            };
            remove.setDefaultFormProcessing(false);
            item.add(remove);
        }
    };

    modules.setReuseItems(true);
    listContainer.add(modules);
    add(listContainer);
}

From source file:org.onehippo.forge.settings.management.config.urlrewriter.UrlRewriterConfigPanel.java

License:Apache License

private WebMarkupContainer createSkippedPrefixes(Model copyOfSkippedPrefixesModel) {

    final WebMarkupContainer listContainer = new WebMarkupContainer("skippedPrefixesContainer");
    //generate a markup-id so the contents can be updated through an AJAX call
    listContainer.setOutputMarkupId(true);
    ListView<String> skippedPrefixes = new ListView<String>("urlrewriter-skipped-prefixes",
            copyOfSkippedPrefixesModel) {
        private static final long serialVersionUID = 1L;

        @Override//  ww  w. j  a va  2  s. c om
        protected void populateItem(final ListItem<String> item) {
            RequiredTextField prefixField = new RequiredTextField("prefix", item.getModel());
            prefixField.setOutputMarkupId(true);
            prefixField.add(new OnChangeAjaxBehavior() {
                private static final long serialVersionUID = 1L;

                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                }
            });
            item.add(prefixField);

            AjaxSubmitLink remove = new AjaxSubmitLink("remove") {
                private static final long serialVersionUID = 1L;

                @Override
                protected void onSubmit(AjaxRequestTarget target, Form form) {
                    int index = item.getIndex();
                    getModelObject().remove(index);
                    target.add(listContainer);
                }
            };
            remove.setDefaultFormProcessing(false);
            item.add(remove);
        }
    };

    AjaxLink addPrefix = new AjaxLink("add") {
        private static final long serialVersionUID = 1L;

        @Override
        public void onClick(AjaxRequestTarget target) {
            skippedPrefixes.getModelObject().add("");
            target.add(listContainer);
            target.focusComponent(this);
        }
    };

    skippedPrefixes.setOutputMarkupId(true);
    listContainer.add(skippedPrefixes);
    listContainer.add(addPrefix);
    return listContainer;
}

From source file:org.onehippo.taxonomy.plugin.NewCategoryDialog.java

License:Apache License

public NewCategoryDialog(final IModel<Taxonomy> taxonomyModel, final String pathKey) {
    super(taxonomyModel);

    this.name = "new category";
    this.pathKey = pathKey;
    this.key = createKey();

    add(new AttributeAppender("class", new Model<String>("hippo-editor"), " "));

    final FormComponent<String> keyField = new TextField<String>("key", new IModel<String>() {

        private static final long serialVersionUID = 1L;

        public String getObject() {
            return getKey();
        }//from   w  w  w.j ava  2  s .c om

        public void setObject(String object) {
            key = object;
        }

        public void detach() {
        }
    });
    keyField.setModelObject(key);
    keyField.add(new SimpleAttributeModifier("readonly", "readonly"));
    keyField.add(new AjaxFormComponentUpdatingBehavior("onchange") {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
        }
    });
    keyField.setOutputMarkupId(true);
    add(keyField);

    final FormComponent<String> nameField = new TextField<String>("name", new IModel<String>() {

        private static final long serialVersionUID = 1L;

        public String getObject() {
            return name;
        }

        public void setObject(String object) {
            name = object;
        }

        public void detach() {
        }
    });

    nameField.add(new OnChangeAjaxBehavior() {

        private static final long serialVersionUID = 1L;

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            keyField.setModelObject(createKey());
            target.addComponent(keyField);
        }
    });
    add(nameField);
}

From source file:org.onehippo.taxonomy.plugin.TaxonomyEditorPlugin.java

License:Apache License

/**
 * Constructor which adds all the UI components.
 * The UI components include taxonomy tree, toolbar, and detail form container.
 * The detail form container holds all the category detail fields such as name, description and synonyms.
 *
 * @param context/*w  ww  .  j a  va  2  s  . c  om*/
 * @param config
 */
public TaxonomyEditorPlugin(final IPluginContext context, final IPluginConfig config) {
    super(context, config);

    final boolean editing = "edit".equals(config.getString("mode"));
    useUrlKeyEncoding = config.getAsBoolean("keys.urlencode", false);
    taxonomy = newTaxonomy(getModel(), editing);

    availableLanguageSelections = getAvailableLanguageSelections();
    currentLanguageSelection = new LanguageSelection(getLocale(), getLocale());

    synonymModel = new IModel<String[]>() {

        private static final long serialVersionUID = 1L;

        public String[] getObject() {
            EditableCategoryInfo info = taxonomy.getCategoryByKey(key)
                    .getInfo(currentLanguageSelection.getLanguageCode());
            return info.getSynonyms();
        }

        public void setObject(String[] object) {
            EditableCategoryInfo info = taxonomy.getCategoryByKey(key)
                    .getInfo(currentLanguageSelection.getLanguageCode());
            try {
                info.setSynonyms(object);
            } catch (TaxonomyException e) {
                redraw();
            }
        }

        public void detach() {
        }

    };
    final IModel<Taxonomy> taxonomyModel = new Model<Taxonomy>(taxonomy);
    String currentLanguageCode = currentLanguageSelection.getLanguageCode();
    tree = new TaxonomyTree("tree", new TaxonomyTreeModel(taxonomyModel, currentLanguageCode),
            currentLanguageCode) {

        private static final long serialVersionUID = 1L;

        @Override
        public boolean isEnabled() {
            return editing;
        }

        @Override
        protected void onNodeLinkClicked(AjaxRequestTarget target, TreeNode node) {
            if (node instanceof CategoryNode) {
                key = ((CategoryNode) node).getCategory().getKey();
                path = ((CategoryNode) node).getCategory().getPath();
            } else {
                key = null;
                path = null;
            }
            redraw();
            super.onNodeLinkClicked(target, node);
        }

    };
    tree.setOutputMarkupId(true);
    add(tree);
    if (editing) {
        TreeNode rootNode = (TreeNode) tree.getModelObject().getRoot();
        tree.getTreeState().selectNode(rootNode, true);
    }

    holder = new WebMarkupContainer("container-holder");
    holder.setOutputMarkupId(true);

    toolbarHolder = new WebMarkupContainer("toolbar-container-holder");
    toolbarHolder.setOutputMarkupId(true);
    AjaxLink<Void> addCategory = new AjaxLink<Void>("add-category") {

        private static final long serialVersionUID = 1L;

        @Override
        public boolean isEnabled() {
            return editing;
        }

        @Override
        public void onClick(AjaxRequestTarget target) {
            IDialogService dialogService = getDialogService();
            dialogService.show(new NewCategoryDialog(taxonomyModel, path) {

                private static final long serialVersionUID = 1L;

                @Override
                public boolean useKeyUrlEncoding() {
                    return useUrlKeyEncoding;
                }

                @Override
                public StringCodec getNodeNameCodec() {
                    final ISettingsService settingsService = getPluginContext()
                            .getService(ISettingsService.SERVICE_ID, ISettingsService.class);
                    final StringCodecFactory stringCodecFactory = settingsService.getStringCodecFactory();
                    final StringCodec stringCodec = stringCodecFactory.getStringCodec("encoding.node");
                    if (stringCodec == null) {
                        return new StringCodecFactory.UriEncoding();
                    }
                    return stringCodec;
                }

                @Override
                protected void onOk() {
                    EditableCategory category = taxonomy.getCategoryByKey(key);
                    TreeNode node;
                    if (category != null) {
                        node = new CategoryNode(new CategoryModel(taxonomyModel, key),
                                currentLanguageSelection.getLanguageCode());
                    } else {
                        node = new TaxonomyNode(taxonomyModel, currentLanguageSelection.getLanguageCode());
                    }
                    try {
                        String newKey = getKey();
                        if (category != null) {
                            category.addCategory(newKey, getName(), currentLanguageSelection.getLanguageCode());
                        } else {
                            taxonomy.addCategory(newKey, getName(), currentLanguageSelection.getLanguageCode());
                        }
                        TreeNode child = new CategoryNode(new CategoryModel(taxonomyModel, newKey),
                                currentLanguageSelection.getLanguageCode());
                        tree.getTreeState().selectNode(child, true);
                        key = newKey;
                    } catch (TaxonomyException e) {
                        error(e.getMessage());
                    }
                    tree.getTreeState().expandNode(node);
                    tree.markNodeChildrenDirty(node);
                    redraw();
                }
            });
        }

    };
    addCategory.add(new Image("add-category-icon",
            new ResourceReference(TaxonomyEditorPlugin.class, "res/new-category-16.png")));
    if (!editing) {
        addCategory.add(new AttributeAppender("class", new Model<String>("disabled"), " "));
    }
    toolbarHolder.add(addCategory);

    // <HCT>
    AjaxLink<Void> removeCategory = new AjaxLink<Void>("remove-category") {

        private static final long serialVersionUID = 5538299138211283825L;

        @Override
        protected IAjaxCallDecorator getAjaxCallDecorator() {
            return new AjaxPreprocessingCallDecorator(super.getAjaxCallDecorator()) {

                private static final long serialVersionUID = -7927968187160354605L;

                @Override
                public CharSequence preDecorateScript(final CharSequence script) {
                    return "if (confirm('" + getString("confirmDelete") + "'))" + "{" + script + "}";
                }
            };
        }

        @Override
        public boolean isEnabled() {
            return editing;
        }

        @Override
        public void onClick(final AjaxRequestTarget target) {
            EditableCategory category = taxonomy.getCategoryByKey(key);
            if (category != null) {
                CategoryNode node = (CategoryNode) tree.getTreeState().getSelectedNodes().iterator().next();
                TreeNode parent = node.getParent();

                try {
                    category.remove();

                    key = null;

                    tree.getTreeState().collapseNode(parent);
                    tree.getTreeState().expandNode(parent);
                    redraw();
                } catch (TaxonomyException e) {
                    LOG.error("Could not remove category {} [{}]",
                            new Object[] { category.getName(), category.getPath(), e });
                }
            }
        }
    };
    removeCategory.add(new Image("remove-category-icon",
            new ResourceReference(TaxonomyEditorPlugin.class, "res/remove-category-16.png")));
    if (!editing) {
        addCategory.add(new AttributeAppender("class", new Model<String>("disabled"), " "));
    }
    toolbarHolder.add(removeCategory);
    // </HCT>

    container = new Form("container") {

        private static final long serialVersionUID = 1L;

        @Override
        public boolean isVisible() {
            return taxonomy.getCategoryByKey(key) != null;
        }
    };

    ChoiceRenderer<LanguageSelection> choiceRenderer = new ChoiceRenderer<LanguageSelection>("displayName",
            "languageCode");
    DropDownChoice<LanguageSelection> languageSelectionChoice = new DropDownChoice<LanguageSelection>(
            "language", new PropertyModel<LanguageSelection>(this, "currentLanguageSelection"),
            availableLanguageSelections, choiceRenderer);
    languageSelectionChoice.add(new OnChangeAjaxBehavior() {

        private static final long serialVersionUID = -151291731388673682L;

        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            redraw();
        }
    });
    languageSelectionChoice.setOutputMarkupId(true);
    languageSelectionChoice.setEnabled(!CollectionUtils.isEmpty(availableLanguageSelections));
    container.add(languageSelectionChoice);
    // show key value key:
    final Label label = new Label("widgetKey", new KeyModel());
    container.add(label);

    if (editing) {
        MarkupContainer name = new Fragment("name", "fragmentname", this);
        FormComponent<String> nameField = new TextField<String>("widget", new NameModel());
        nameField.add(new OnChangeAjaxBehavior() {

            private static final long serialVersionUID = 1L;

            @Override
            protected void onUpdate(AjaxRequestTarget target) {
                tree.markNodeDirty(getSelectedNode());
            }
        });
        name.add(nameField);
        container.add(name);

        container.add(new TextAreaWidget("description", new DescriptionModel()));
    } else {
        container.add(new Label("name", new NameModel()));
        TextField<String> myKey = new TextField<String>("key");
        myKey.setVisible(false);
        container.add(myKey);
        container.add(new MultiLineLabel("description", new DescriptionModel()));
    }

    container.add(new RefreshingView<String>("view") {

        private static final long serialVersionUID = 1L;

        @Override
        protected Iterator<IModel<String>> getItemModels() {
            return getSynonymList().iterator();
        }

        @Override
        protected void populateItem(final Item<String> item) {
            item.add(new AjaxLink("up") {

                private static final long serialVersionUID = 1L;

                @Override
                public boolean isEnabled() {
                    return item.getIndex() > 0;
                }

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

                @Override
                public void onClick(AjaxRequestTarget target) {
                    String[] synonyms = synonymModel.getObject();
                    int index = item.getIndex();
                    String tmp = synonyms[index];
                    synonyms[index] = synonyms[index - 1];
                    synonyms[index - 1] = tmp;
                    synonymModel.setObject(synonyms);
                    target.addComponent(holder);
                }
            });
            item.add(new AjaxLink("down") {

                private static final long serialVersionUID = 1L;

                @Override
                public boolean isEnabled() {
                    String[] synonyms = synonymModel.getObject();
                    return item.getIndex() < synonyms.length - 1;
                }

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

                @Override
                public void onClick(AjaxRequestTarget target) {
                    String[] synonyms = synonymModel.getObject();
                    int index = item.getIndex();
                    String tmp = synonyms[index];
                    synonyms[index] = synonyms[index + 1];
                    synonyms[index + 1] = tmp;
                    synonymModel.setObject(synonyms);
                    target.addComponent(holder);
                }
            });
            item.add(new AjaxLink("remove") {

                private static final long serialVersionUID = 1L;

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

                @Override
                public void onClick(AjaxRequestTarget target) {
                    String[] synonyms = synonymModel.getObject();
                    String[] syns = new String[synonyms.length - 1];
                    System.arraycopy(synonyms, 0, syns, 0, item.getIndex());
                    System.arraycopy(synonyms, item.getIndex() + 1, syns, item.getIndex(),
                            synonyms.length - item.getIndex() - 1);
                    synonymModel.setObject(syns);
                    target.addComponent(holder);
                }
            });
            if (editing) {
                TextFieldWidget input = new TextFieldWidget("synonym", item.getModel());
                FormComponent fc = (FormComponent) input.get("widget");
                fc.add(new MinimumLengthValidator(1));
                item.add(input);
            } else {
                item.add(new Label("synonym", item.getModel()));
            }
        }
    });

    container.add(new AjaxLink("add") {

        private static final long serialVersionUID = 1L;

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

        @Override
        public void onClick(AjaxRequestTarget target) {
            String[] synonyms = synonymModel.getObject();
            String[] newSyns = new String[synonyms.length + 1];
            System.arraycopy(synonyms, 0, newSyns, 0, synonyms.length);
            newSyns[synonyms.length] = "";
            synonymModel.setObject(newSyns);
            target.addComponent(holder);
        }

    });

    holder.add(container);
    add(toolbarHolder);
    add(holder);

    add(CSSPackageResource.getHeaderContribution(TaxonomyEditorPlugin.class, "res/style.css"));
}

From source file:org.onexus.website.api.pages.browser.filters.panels.AbstractFilterPanel.java

License:Apache License

@Override
protected void onInitialize() {
    super.onInitialize();

    Form<FilterOption> form = new Form("form", option);

    // Feedback panel
    final FeedbackPanel feedbackPanel = new FeedbackPanel("feedback");
    feedbackPanel.setOutputMarkupId(true);
    form.add(feedbackPanel);//from www.  ja  va  2  s .c o  m

    // Value component
    final FormComponent<T> valueComponent = createValueFormComponent("value");
    valueComponent.setOutputMarkupPlaceholderTag(true);
    valueComponent.setVisible(defaultOption.getOperation().isNeedsValue());
    form.add(valueComponent);

    // Operations drop down
    final DropDownChoice<FilterOperation> operationsDropDown = new DropDownChoice<FilterOperation>("operation",
            operations);
    operationsDropDown.setNullValid(false);
    operationsDropDown.add(new OnChangeAjaxBehavior() {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            valueComponent.setVisible(option.getObject().getOperation().isNeedsValue());
            target.add(valueComponent);
        }
    });
    form.add(operationsDropDown);

    // Create filter link
    form.add(new AjaxSubmitLink("submit") {
        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form) {

            FilterOption<T> fo = option.getObject();
            T value = fo.getValue();

            FilterOperation operation = fo.getOperation();
            String title = operation.createTitle(header.getLabel(), value);
            FilterConfig fc = new FilterConfig(title);

            fc.setCollection(header.getCollection().getORI());
            fc.setDefine("fc='" + fc.getCollection() + "'");

            Filter where = operation.createFilter("fc", header.getField().getId(), value);
            fc.setWhere(where.toString());

            addFilter(target, fc);
        }
    });

    add(form);

}

From source file:org.onexus.website.api.widgets.search.SearchWidget.java

License:Apache License

public SearchWidget(String componentId, IModel<SearchWidgetStatus> statusModel) {
    super(componentId, statusModel);

    Form<SearchWidgetStatus> form = new Form<SearchWidgetStatus>("toolsForms",
            new CompoundPropertyModel<SearchWidgetStatus>((IModel<SearchWidgetStatus>) statusModel));

    // Search field & button
    TextField<String> searchField = new TextField<String>("search");
    searchField.add(new OnChangeAjaxBehavior() {
        @Override/*www  .j a  v a  2  s.co  m*/
        protected void onUpdate(AjaxRequestTarget target) {

            String search = SearchWidget.this.getStatus().getSearch();

            if (StringUtils.isEmpty(search)) {
                sendEvent(EventFiltersUpdate.EVENT);
            }

        }
    });

    form.add(searchField);

    form.add(new AjaxButton("searchButton") {

        @Override
        protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
            sendEvent(EventFiltersUpdate.EVENT);
        }

        @Override
        protected void onError(AjaxRequestTarget target, Form<?> form) {

        }
    });

    add(form);

}

From source file:org.onexus.website.api.widgets.selector.SelectorWidget.java

License:Apache License

public SelectorWidget(String componentId, IModel<SelectorWidgetStatus> statusModel) {
    super(componentId, statusModel);

    Form form = new Form("form");
    DropDownChoice<EntityChoice> dropDown = new DropDownChoice<EntityChoice>("select",
            new PropertyModel<EntityChoice>(this, "selection"), getChoices()) {
        @Override//from   w w  w  .j av  a2 s  .c om
        protected CharSequence getDefaultChoice(String selectedValue) {

            String option = SelectorWidget.this.getConfig().getTitle();

            if (Strings.isEmpty(option)) {
                option = "Choose one...";
            }

            // The <option> tag buffer
            final AppendingStringBuffer buffer = new AppendingStringBuffer(64 + option.length());

            // Add option tag
            buffer.append("\n<option");

            // If null is selected, indicate that
            if ("".equals(selectedValue)) {
                buffer.append(" selected=\"selected\"");
            }

            // Add body of option tag
            buffer.append(" value=\"\">").append(option).append("</option>");

            return buffer;
        }
    };

    dropDown.add(new OnChangeAjaxBehavior() {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {

            Boolean selection = getConfig().getSelection();

            if (selection == null || !selection) {
                sendEvent(EventFiltersUpdate.EVENT);
            } else {
                EntityChoice choice = getSelection();

                if (choice != null) {
                    BrowserPageStatus pageStatus = findParentStatus(BrowserPageStatus.class);
                    pageStatus.addEntitySelection(
                            new SingleEntitySelection(getConfig().getCollection(), getSelection().getId()));
                    setSelection(null);
                    sendEvent(EventAddFilter.EVENT);
                }
            }
        }
    });

    dropDown.setNullValid(true);

    add(new AjaxIndicatorAppender());

    form.add(dropDown);
    add(form);

}

From source file:org.onexus.website.api.widgets.tableviewer.NavigationToolbar.java

License:Apache License

@Override
protected void onBeforeRender() {

    WebMarkupContainer span = new WebMarkupContainer("span");
    addOrReplace(span);// ww w  .  j  a  v a 2s . c  om
    span.add(AttributeModifier.replace("colspan", String.valueOf(getTable().getColumns().size())));

    DropDownChoice<Integer> dropDown = new DropDownChoice<Integer>("rowsxpage",
            new PropertyModel<Integer>(this, "rowsPerPage"), PAGE_OPTIONS, new RowsPerPageChoiceRenderer());

    dropDown.add(new OnChangeAjaxBehavior() {
        @Override
        protected void onUpdate(AjaxRequestTarget target) {
            send(getPage(), Broadcast.BREADTH, EventViewChange.EVENT);
        }
    });

    span.add(dropDown);

    span.add(new PrevLink("prev"));

    span.add(new NextLink("next"));

    AjaxLink<String> countLink = new IndicatingAjaxLink<String>("count") {
        @Override
        public void onClick(AjaxRequestTarget target) {
            getDataProvider().forceCount();
            target.add(getTable());
        }
    };
    span.add(countLink);
    countLink.add(new Label("from", new PropertyModel<Long>(this, "from")));
    countLink.add(new Label("to", new PropertyModel<Long>(this, "to")));
    countLink.add(new Label("of", new PropertyModel<String>(this, "of")));

    super.onBeforeRender();
}

From source file:org.openengsb.ui.admin.ruleEditorPanel.RuleEditorPanel.java

License:Apache License

private void initTextArea(Form<Object> form) {
    Model<String> textAreaModel = new Model<String>();
    textArea = new TextArea<String>("text", textAreaModel);
    textArea.add(new OnChangeAjaxBehavior() {
        @Override//from  w  w  w . j a v a2  s.  c om
        protected void onUpdate(AjaxRequestTarget target) {
            enableButtons(target);
        }
    });
    textArea.setEnabled(false);
    textArea.setOutputMarkupId(true);
    form.add(textArea);
}

From source file:org.projectforge.plugins.teamcal.dialog.TeamCalFilterDialog.java

License:Open Source License

@SuppressWarnings("serial")
private void redrawTimesheetsUserControls() {
    if (timesheetUserFieldset != null) {
        timesheetUserFieldset.removeAllFields();
    }//from  www  .j  a v  a2  s .  c  om
    final UserSelectPanel timesheetUserSelectPanel = calendarPageSupport.addUserSelectPanel(
            timesheetUserFieldset, new PropertyModel<PFUserDO>(this, "timesheetsUser"), false);
    if (timesheetUserSelectPanel != null) {
        timesheetUserSelectPanel.getFormComponent().add(new OnChangeAjaxBehavior() {
            @Override
            protected void onUpdate(final AjaxRequestTarget target) {
                final PFUserDO user = (PFUserDO) timesheetUserSelectPanel.getFormComponent().getModelObject();
                setTimesheetsUser(user);
            }
        });
    }
}