List of usage examples for org.apache.wicket.markup.html.form.upload FileUploadField getFileUpload
public FileUpload getFileUpload()
From source file:com.chitek.ignition.drivers.generictcp.meta.config.ui.MessageConfigUI.java
License:Apache License
private void addComponents() { // Select the first message for initial display if (getConfig().messages.isEmpty()) { // No messages configured. Create a new message with id=1. getConfig().addMessageConfig(new MessageConfig(1)); }//from ww w. ja va2 s . com currentMessage = getConfig().getMessageList().get(0); currentMessage.calcOffsets(getConfig().getMessageIdType().getByteSize()); currentMessageId = currentMessage.getMessageId(); // ******************************************************************************************* // *** Form for XML import final FileUploadField uploadField = new FileUploadField("upload-field", new ListModel<FileUpload>()); Form<?> uploadForm = new Form<Object>("upload-form") { @Override protected void onSubmit() { try { FileUpload upload = uploadField.getFileUpload(); if (upload != null) { handleOnUpload(upload.getInputStream()); } else { warn(new StringResourceModel("warn.noFileToUpload", this, null).getString()); } } catch (Exception e) { this.error(new StringResourceModel("import.error", this, null).getString() + " Exception: " + e.toString()); } } }; uploadForm.add(uploadField); SubmitLink importLink = new SubmitLink("import-link"); uploadForm.add(importLink); add(uploadForm); // ******************************************************************************************* // *** The message configuration currentMessageModel = new PropertyModel<MessageConfig>(this, "currentMessage"); editForm = new Form<MessageConfig>("edit-form", new CompoundPropertyModel<MessageConfig>(currentMessageModel)) { @Override protected void onError() { // Validation error - reset the message dropdown to the original value // Clear input causes the component to reload the model currentMessageIdDropdown.clearInput(); super.onError(); } }; editForm.add(new MessageFormValidator()); WebMarkupContainer tableContainer = new WebMarkupContainer("table-container"); messageIdTypeDropDown = getMessageIdTypeDropdown(); tableContainer.add(messageIdTypeDropDown); currentMessageIdDropdown = getCurrentMessageIdDropdown(); tableContainer.add(currentMessageIdDropdown); Button buttonNew = new Button("new"); buttonNew.add(new AjaxFormSubmitBehavior("onclick") { @Override protected void onSubmit(AjaxRequestTarget target) { handleNew(target); } @Override protected void onError(AjaxRequestTarget target) { handleError(target); } }); tableContainer.add(buttonNew); Button buttonCopy = new Button("copy"); buttonCopy.add(new AjaxFormSubmitBehavior("onclick") { @Override protected void onSubmit(AjaxRequestTarget target) { handleCopy(target); } @Override protected void onError(AjaxRequestTarget target) { handleError(target); } }); tableContainer.add(buttonCopy); Button deleteButton = new Button("delete"); deleteButton.add(new AjaxEventBehavior("onclick") { @Override protected void onEvent(AjaxRequestTarget target) { handleDelete(target); } }); tableContainer.add(deleteButton); messageTypeDropdown = getMessageTypeDropdown(); tableContainer.add(messageTypeDropdown); tableContainer.add(getQueueModeDropdown()); tableContainer.add(new CheckBox("usePersistance").setOutputMarkupId(true)); WebMarkupContainer listEditorContainer = new WebMarkupContainer("list-editor"); messageIdTextField = getMessageIdTextField(); listEditorContainer.add(messageIdTextField); messageAliasTextField = getMessageAliasTextField(); listEditorContainer.add(messageAliasTextField); // Create the list editor editor = new ListEditor<TagConfig>("tags", new PropertyModel<List<TagConfig>>(currentMessageModel, "tags")) { @Override protected void onPopulateItem(EditorListItem<TagConfig> item) { item.setModel(new CompoundPropertyModel<TagConfig>(item.getModelObject())); BinaryDataType dataType = item.getModelObject().getDataType(); boolean enable = dataType.isSpecial() ? false : true; // Offset is displayed only for information item.add(new Label("offset").setOutputMarkupId(true)); if (enable) { item.add(getIdTextField()); } else { // The static TextField has no validation. Validation would fail for special tags. item.add(getSpecialIdTextField().setEnabled(false)); } item.add(getAliasTextField().setVisible(enable)); item.add(getSizeTextField().setEnabled(dataType.isArrayAllowed())); item.add(getTagLengthTypeDropDown().setEnabled(dataType.supportsVariableLength())); item.add(getDataTypeDropdown()); // Create the edit links to be used in the list editor item.add(getInsertLink()); item.add(getDeleteLink()); item.add(getMoveUpLink().setVisible(item.getIndex() > 0)); item.add(getMoveDownLink().setVisible(item.getIndex() < getList().size() - 1)); } }; listEditorContainer.add(editor); Label noItemsLabel = new Label("no-items-label", new StringResourceModel("noitems", this, null)) { @Override public boolean isVisible() { return editor.getList().size() == 0; } }; listEditorContainer.add(noItemsLabel); listEditorContainer.add(new EditorSubmitLink("add-row-link") { @Override public void onSubmit() { editor.addItem(new TagConfig()); // Adjust the visibility of the edit links updateListEditor(editor); } }); listEditorContainer.setOutputMarkupId(true); tableContainer.add(listEditorContainer); editForm.add(tableContainer); // XML export SubmitLink exportLink = new SubmitLink("export-link", editForm) { @Override public void onSubmit() { ResourceStreamRequestHandler handler = new ResourceStreamRequestHandler(getResourceStream(), getFileName()); handler.setContentDisposition(ContentDisposition.ATTACHMENT); handler.setCacheDuration(Duration.NONE); getRequestCycle().scheduleRequestHandlerAfterCurrent(handler); } private String getFileName() { return String.format("MsgConfig_%s.xml", currentMessageModel.getObject().getMessageId()); } private IResourceStream getResourceStream() { String config = currentMessageModel.getObject().toXMLString(); return new StringResourceStream(config, "text/xml"); } }; editForm.add(exportLink); uploadForm.add(editForm); }
From source file:com.doculibre.constellio.wicket.panels.admin.searchInterface.LogoConfigPanel.java
License:Open Source License
public LogoConfigPanel(String id) { super(id);//from w w w.ja v a 2 s. c o m Form form = new Form("form"); add(form); form.add(new FeedbackPanel("feedback")); final FileUploadField logoSmallField = new FileUploadField("logoSmall"); form.add(logoSmallField); final FileUploadField logoLargeField = new FileUploadField("logoLarge"); form.add(logoLargeField); Button submitButton = new Button("submitButton") { @Override public void onSubmit() { SearchInterfaceConfigServices searchInterfaceConfigServices = ConstellioSpringUtils .getSearchInterfaceConfigServices(); SearchInterfaceConfig searchInterfaceConfig = searchInterfaceConfigServices.get(); FileUpload uploadLogoSmall = logoSmallField.getFileUpload(); FileUpload uploadLogoLarge = logoLargeField.getFileUpload(); if (uploadLogoSmall != null) { if (uploadLogoSmall.getSize() <= SearchInterfaceConfig.LOGO_MAXIMUM_SIZE) { searchInterfaceConfig.setLogoSmallContent(uploadLogoSmall.getBytes()); } else { String size = FileSizeUtils.formatSize(uploadLogoSmall.getSize(), 3); String maxSize = FileSizeUtils.formatSize(SearchInterfaceConfig.LOGO_MAXIMUM_SIZE, 3); String[] params = new String[] { size, maxSize }; String error = new StringResourceModel("logoSmallTooBig", LogoConfigPanel.this, null, params).getString(); error(error); uploadLogoSmall = null; } } if (uploadLogoLarge != null) { if (uploadLogoLarge.getSize() <= SearchInterfaceConfig.LOGO_MAXIMUM_SIZE) { searchInterfaceConfig.setLogoLargeContent(uploadLogoLarge.getBytes()); } else { String size = FileSizeUtils.formatSize(uploadLogoLarge.getSize(), 3); String maxSize = FileSizeUtils.formatSize(SearchInterfaceConfig.LOGO_MAXIMUM_SIZE, 3); String[] params = new String[] { size, maxSize }; String error = new StringResourceModel("logoLargeTooBig", LogoConfigPanel.this, null, params).getString(); error(error); uploadLogoLarge = null; } } if (uploadLogoSmall != null || uploadLogoLarge != null) { EntityManager entityManager = ConstellioPersistenceContext.getCurrentEntityManager(); if (!entityManager.getTransaction().isActive()) { entityManager.getTransaction().begin(); } searchInterfaceConfigServices.makePersistent(searchInterfaceConfig); entityManager.getTransaction().commit(); } } }; form.add(submitButton); }
From source file:com.evolveum.midpoint.web.component.input.UploadDownloadPanel.java
License:Apache License
private FileUpload getFileUpload() { FileUploadField file = (FileUploadField) get(ID_INPUT_FILE); return file.getFileUpload(); }
From source file:com.evolveum.midpoint.web.page.admin.cases.PageCaseWorkItem.java
License:Apache License
private void closeCaseWorkItemPerformed(AjaxRequestTarget target) { OperationResult result = new OperationResult(OPERATION_SAVE_CASE_WORK_ITEM); Task task = createSimpleTask(OPERATION_SAVE_CASE_WORK_ITEM); try {//w w w . j a v a2 s .c o m CaseWorkItemDto dto = caseWorkItemDtoModel.getObject(); CaseManagementService cms = getCaseManagementService(); AbstractWorkItemOutputType output = new AbstractWorkItemOutputType().comment(dto.getComment()) .outcome("SUCCESS"); FileUploadField evidenceUploadField = (FileUploadField) get(ID_MAIN_FORM).get(ID_CASE_WORK_ITEM_FORM) .get(ID_CASE_WORK_ITEM_FORM_EVIDENCE); if (evidenceUploadField != null) { FileUpload evidence = evidenceUploadField.getFileUpload(); if (evidence != null) { String filename = evidence.getClientFileName(); String contentType = evidence.getContentType(); output = output.evidence(evidence.getBytes()).evidenceContentType(contentType) .evidenceFilename(filename); } } cms.completeWorkItem(caseId, caseWorkItemId, output, task, result); } catch (Exception ex) { result.recordFatalError("Couldn't close case work item.", ex); LoggingUtils.logUnexpectedException(LOGGER, "Couldn't close case work item", ex); } processResult(target, result, false); }
From source file:com.evolveum.midpoint.web.page.admin.configuration.PageImportObject.java
License:Apache License
private void saveFilePerformed(AjaxRequestTarget target) { OperationResult result = new OperationResult(OPERATION_IMPORT_FILE); FileUploadField file = (FileUploadField) get( createComponentPath(ID_MAIN_FORM, ID_INPUT, ID_INPUT_FILE, ID_FILE_INPUT)); final FileUpload uploadedFile = file.getFileUpload(); if (uploadedFile == null) { error(getString("pageImportObject.message.nullFile")); target.add(getFeedbackPanel());/* w ww . ja v a 2 s .c o m*/ return; } InputStream stream = null; File newFile = null; try { // Create new file MidPointApplication application = getMidpointApplication(); WebApplicationConfiguration config = application.getWebApplicationConfiguration(); File folder = new File(config.getImportFolder()); if (!folder.exists() || !folder.isDirectory()) { folder.mkdir(); } newFile = new File(folder, uploadedFile.getClientFileName()); // Check new file, delete if it already exists if (newFile.exists()) { newFile.delete(); } // Save file Task task = createSimpleTask(OPERATION_IMPORT_FILE); newFile.createNewFile(); uploadedFile.writeTo(newFile); InputStreamReader reader = new InputStreamReader(new FileInputStream(newFile), "utf-8"); stream = new ReaderInputStream(reader, reader.getEncoding()); getModelService().importObjectsFromStream(stream, model.getObject(), task, result); result.recomputeStatus(); } catch (Exception ex) { result.recordFatalError("Couldn't import file.", ex); LoggingUtils.logException(LOGGER, "Couldn't import file", ex); } finally { if (stream != null) { IOUtils.closeQuietly(stream); } if (newFile != null) { FileUtils.deleteQuietly(newFile); } } showResult(result); target.add(getFeedbackPanel()); }
From source file:com.evolveum.midpoint.web.page.admin.reports.PageNewReport.java
License:Apache License
private void importReportFromFilePerformed(AjaxRequestTarget target) { OperationResult result = new OperationResult(OPERATION_IMPORT_REPORT); FileUploadField file = (FileUploadField) get( createComponentPath(ID_MAIN_FORM, ID_INPUT, ID_INPUT_FILE, ID_FILE_INPUT)); final FileUpload uploadedFile = file.getFileUpload(); if (uploadedFile == null) { error(getString("PageNewReport.message.nullFile")); target.add(getFeedbackPanel());// w w w .j ava2s.c o m return; } InputStream stream = null; File newFile = null; try { // Create new file MidPointApplication application = getMidpointApplication(); WebApplicationConfiguration config = application.getWebApplicationConfiguration(); File folder = new File(config.getImportFolder()); if (!folder.exists() || !folder.isDirectory()) { folder.mkdir(); } newFile = new File(folder, uploadedFile.getClientFileName()); // Check new file, delete if it already exists if (newFile.exists()) { newFile.delete(); } // Save file // Task task = createSimpleTask(OPERATION_IMPORT_FILE); newFile.createNewFile(); uploadedFile.writeTo(newFile); InputStreamReader reader = new InputStreamReader(new FileInputStream(newFile), "utf-8"); // reader. stream = new ReaderInputStream(reader, reader.getEncoding()); byte[] reportIn = IOUtils.toByteArray(stream); setResponsePage(new PageReport(new ReportDto(Base64.encodeBase64(reportIn)))); } catch (Exception ex) { result.recordFatalError("Couldn't import file.", ex); LoggingUtils.logException(LOGGER, "Couldn't import file", ex); } finally { if (stream != null) { IOUtils.closeQuietly(stream); } if (newFile != null) { FileUtils.deleteQuietly(newFile); } } showResult(result); target.add(getFeedbackPanel()); }
From source file:com.inductiveautomation.xopc.drivers.modbus2.configuration.web.ModbusConfigurationUI.java
License:Open Source License
private void addComponents() { T settingsRecord = (T) getDefaultModelObject(); String mapString = (String) TypeUtilities.toString(settingsRecord.getAddressMap()); addressMap = MutableModbusAddressMap.fromParseableString(mapString); if (addressMap == null) { addressMap = new MutableModbusAddressMap(); }//w ww . ja v a 2 s.c o m radix = addressMap.getDesignatorRadix(); final Form<Object> form = new Form<Object>("form") { @Override protected void onSubmit() { handleOnSubmit(); } }; form.add(new FeedbackPanel("feedback")); final WebMarkupContainer tableContainer = new WebMarkupContainer("table-container"); tableContainer.setOutputMarkupId(true); final WebMarkupContainer radixContainer = new WebMarkupContainer("radix-container") { @Override public boolean isVisible() { return entries.size() > 0; } }; radixContainer.setOutputMarkupId(true); radixContainer.add(new Label("radix-label", new LenientResourceModel("radixlabel", "Radix")) { @Override public boolean isVisible() { return entries.size() > 0; } }); final RequiredTextField<Integer> radixField = new RequiredTextField<Integer>("radix", new PropertyModel<Integer>(this, "radix")) { @Override public boolean isVisible() { return entries.size() > 0; } }; radixField.add(new OnChangeAjaxBehavior() { @Override protected void onUpdate(AjaxRequestTarget target) { try { Integer radix = Integer.parseInt(radixField.getValue()); setRadix(radix); } catch (Exception e) { } } }); radixContainer.add(radixField); tableContainer.add(radixContainer); radixContainer.add(new Link<Object>("set-radix") { @Override public void onClick() { if (addressMap != null) { } } @Override public boolean isVisible() { return false; } }); // Create the configuration entries for the listview for (DesignatorRange dr : addressMap.keySet()) { MutableDesignatorRange mdr = new MutableDesignatorRange(dr); MutableModbusRange mbr = new MutableModbusRange(addressMap.get(dr)); entries.add(new ModbusConfigurationEntry(mdr, mbr)); } // Create the listview listview = new ListEditor<ModbusConfigurationEntry>("config-listview", getListviewModel()) { @Override protected void onPopulateItem(ListItem<ModbusConfigurationEntry> item) { final ModbusConfigurationEntry configEntry = item.getModelObject(); item.add(newPrefixTextField(configEntry)); item.add(newStartTextField(configEntry)); item.add(newEndTextField(configEntry)); item.add(newStepCheckboxField(configEntry)); item.add(newModbusUnitIDTextField(configEntry)); item.add(newModbusAddressTypeDropdown(configEntry)); item.add(newModbusAddressTextField(configEntry)); item.add(new DeleteLink("delete-link")); } }; WebMarkupContainer noMappingsContainer = new WebMarkupContainer("no-mappings-container") { @Override public boolean isVisible() { return entries.size() == 0; } ; }; noMappingsContainer .add(new Label("no-mappings-label", new LenientResourceModel("nomappings", "No mappings."))); tableContainer.add(noMappingsContainer); tableContainer.add(listview); form.add(tableContainer); form.add(new SubmitLink("add-row-link") { { setDefaultFormProcessing(false); } @Override public void onSubmit() { listview.addItem(new ModbusConfigurationEntry()); } }); form.add(new Button("save")); add(form); // CSV export try { Link<IResource> exportLink = new ResourceLink<IResource>("export-link", new ExportCsvResource()); add(exportLink); } catch (Exception e) { Link<Object> exportLink = new Link<Object>("export-link") { @Override public void onClick() { } @Override public boolean isVisible() { return false; } }; add(exportLink); } // CSV import final FileUploadField uploadField = new FileUploadField("upload-field"); Form<?> uploadForm = new Form<Object>("upload-form") { @Override protected void onSubmit() { try { addressMap = ModbusCsvParser.fromCsv(uploadField.getFileUpload().getInputStream()); radix = addressMap.getDesignatorRadix(); listview.clear(); for (DesignatorRange dr : addressMap.keySet()) { MutableDesignatorRange mdr = new MutableDesignatorRange(dr); MutableModbusRange mbr = new MutableModbusRange(addressMap.get(dr)); listview.addItem(new ModbusConfigurationEntry(mdr, mbr)); } } catch (Exception e) { error("Error importing configuration from CSV file."); } } }; uploadForm.add(uploadField); SubmitLink importLink = new SubmitLink("import-link"); uploadForm.add(importLink); add(uploadForm); }
From source file:com.romeikat.datamessie.core.base.ui.panel.FileUploadPanel.java
License:Open Source License
private void initialize() { setTitle("File Upload"); uploadForm = new Form<Void>("uploadForm"); uploadForm.setMultiPart(true);//from w w w. j av a 2s . c o m add(uploadForm); // Input panel (only create once, so the same panel will be reused for future versions of // the FileUplodPanel) if (inputPanel == null) { inputPanel = getInputPanel("inputPanel"); } uploadForm.add(inputPanel); final String[] fileUploadLabels = getFileUploadLabels(); final boolean[] fileUploadRequireds = getFileUploadRequireds(); final int numberOfFileUploads = fileUploadLabels.length; final String fileUploadLabelsText = numberOfFileUploads == 1 ? "Select file:" : "Select files:"; final Label fileUploadsLabel = new Label("fileUploadsLabel", fileUploadLabelsText); uploadForm.add(fileUploadsLabel); final List<Integer> fileUploadNumbers = new ArrayList<Integer>(numberOfFileUploads); for (int i = 0; i < numberOfFileUploads; i++) { fileUploadNumbers.add(i); } fileUploadFields = new FileUploadField[numberOfFileUploads]; final ListView<Integer> fileUploadList = new ListView<Integer>("fileUploadList", fileUploadNumbers) { private static final long serialVersionUID = 1L; @Override protected void populateItem(final ListItem<Integer> item) { final int numberOfFileUpload = item.getModelObject(); // Label final String fileUploadLabelText = fileUploadLabels[numberOfFileUpload] + ":"; final Label fileUploadLabel = new Label("fileUploadLabel", fileUploadLabelText); fileUploadLabel.setVisible(fileUploadLabelText != null); item.add(fileUploadLabel); // File upload final FileUploadField fileUploadField = new FileUploadField("fileUploadField"); fileUploadFields[numberOfFileUpload] = fileUploadField; item.add(fileUploadField); } }; uploadForm.add(fileUploadList); feedbackTextArea = new TextArea<String>("feedbackTextArea", feedbackModel); feedbackTextArea.setOutputMarkupId(true); uploadForm.add(feedbackTextArea); final AjaxFallbackButton submitButton = new AjaxFallbackButton("submitButton", Model.of(getSubmitButtonLabel()), uploadForm) { private static final long serialVersionUID = 1L; @Override protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) { // Process uploaded files final List<String> uploadedFileContents = new ArrayList<String>(numberOfFileUploads); for (int i = 0; i < numberOfFileUploads; i++) { // Get uploaded file content final FileUploadField fileUploadField = fileUploadFields[i]; final FileUpload uploadedFile = fileUploadField.getFileUpload(); final boolean fileUploadRequired = fileUploadRequireds[i]; if (uploadedFile == null && fileUploadRequired) { return; } final String uploadedFileContent; if (uploadedFile == null) { uploadedFileContent = null; } else { InputStream uploadStream; try { uploadStream = uploadedFile.getInputStream(); } catch (final IOException e) { LOG.error("Could not read content from uploaded file", e); return; } final Scanner uploadFileScanner = new Scanner(uploadStream, "UTF-8"); uploadedFileContent = uploadFileScanner.useDelimiter("\\A").next(); uploadFileScanner.close(); } // Remember uploaded file content uploadedFileContents.add(uploadedFileContent); } // Process uploaded files try { processFileContents(inputPanel, uploadedFileContents); } // In case of error, show feedback catch (final FileProcessingException e) { feedbackModel.setObject(e.getMessage()); target.add(feedbackTextArea); return; } // Otherwise, close modalContentWindow.close(target); // Update tasks immediately target.add(((AbstractAuthenticatedPage) getPage()).getTaskExecutionsPanel()); } }; uploadForm.add(submitButton); }
From source file:com.tysanclan.site.projectewok.pages.member.admin.TangoImporterPage.java
License:Open Source License
/** * /*from w w w.j a v a 2 s . c om*/ */ public TangoImporterPage() { super("Tango Conversion Page"); Form<?> uploadForm = new Form<Void>("uploadForm") { private static final long serialVersionUID = 1L; /** * @see org.apache.wicket.markup.html.form.Form#onSubmit() */ @Override protected void onSubmit() { PasswordTextField keyField = (PasswordTextField) get("masterKey"); if (userDAO.findAll().isEmpty()) { if (keyField.getModelObject().equals(TysanApplication.MASTER_KEY)) { FileUploadField field = (FileUploadField) get("fileUploader"); FileUpload upload = field.getFileUpload(); if (upload == null) { error("You must upload a file"); return; } try { TysanScheduler.getScheduler() .scheduleTask(new TangoImportTask(upload.getInputStream())); info("Tango import background job started"); } catch (IOException e) { error("Internal error: Unable to read upload"); } } else { error("Master key invalid"); } } else { error("Import can only be run on an empty database!"); } } }; uploadForm.add(new PasswordTextField("masterKey", new Model<String>(""))); uploadForm.add(new FileUploadField("fileUploader", new ListModel<FileUpload>())); add(uploadForm); }
From source file:com.tysanclan.site.projectewok.pages.member.CreateGamePetitionPage.java
License:Open Source License
public CreateGamePetitionPage() { super("Create Game Petition"); add(new Label("count", new Model<Integer>(gameService.getRequiredPetitionSignatures()))); Form<GamePetition> form = new Form<GamePetition>("petitionForm") { private static final long serialVersionUID = 1L; /**// w ww .j a v a2s . c om * @see org.apache.wicket.markup.html.form.Form#onSubmit() */ @SuppressWarnings("unchecked") @Override protected void onSubmit() { FileUploadField iconField = (FileUploadField) get("icon"); FileUpload upload = iconField.getFileUpload(); TextField<String> nameField = (TextField<String>) get("name"); DropDownChoice<Realm> realmChoice = (DropDownChoice<Realm>) get("realm"); TextField<String> realmField = (TextField<String>) get("newRealm"); String name = nameField.getModelObject(); Realm realm = realmChoice.getModelObject(); String realmName = realmField.getModelObject(); GamePetition p = null; if (realm == null) { p = gameService.createPetition(getUser(), name, realmName, upload.getBytes()); } else { p = gameService.createPetition(getUser(), name, realm, upload.getBytes()); } if (p != null) { setResponsePage(new SignGamePetitionsPage()); } else { error("Invalid image size, did you upload a valid GIF, JPEG or PNG with dimensions at least 48x48 and at most 64x64?"); } } }; form.setMultiPart(true); add(form); form.add(new TextField<String>("name", new Model<String>("")).setRequired(true)); form.add(new FileUploadField("icon").setRequired(true)); List<Realm> realms = realmService.getRealms(); DropDownChoice<Realm> realmChoice = new DropDownChoice<Realm>("realm", ModelMaker.wrap((Realm) null), ModelMaker.wrapChoices(realms)); realmChoice.setNullValid(true); realmChoice.setVisible(realms.size() > 0); realmChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") { private static final long serialVersionUID = 1L; @SuppressWarnings("unchecked") @Override protected void onUpdate(AjaxRequestTarget target) { DropDownChoice<Realm> rc = (DropDownChoice<Realm>) getComponent(); Component newRealmField = rc.getParent().get("newRealm"); newRealmField.setVisible(rc.getModelObject() == null); if (target != null) { target.add(newRealmField); } } }); realmChoice.setChoiceRenderer(new IChoiceRenderer<Realm>() { private static final long serialVersionUID = 1L; @Override public Object getDisplayValue(Realm object) { return object.getName(); } @Override public String getIdValue(Realm object, int index) { return object == null ? "null" : object.getId().toString(); } }); form.add(new TextField<String>("newRealm", new Model<String>("")).setOutputMarkupId(true) .setOutputMarkupPlaceholderTag(true)); form.add(realmChoice); }