public ImageUploadContentPanel(String pId, String customUploadFolderPath) { super(pId); setOutputMarkupId(true); this.uploadFolderPath = customUploadFolderPath; Form<?> form = new Form<Void>("form"); final FeedbackPanel feedback = new FeedbackPanel("feedback"); feedback.setOutputMarkupId(true); form.add(feedback); final FileUploadField fileUploadField = new FileUploadField("file"); fileUploadField.setLabel(new ResourceModel("required.label")); fileUploadField.setRequired(true); fileUploadField.add(FILE_EXTENSION_VALIDATOR); form.add(fileUploadField); form.add( new AjaxButton("uploadButton", form) { private static final long serialVersionUID = 1L; @Override protected void onSubmit(AjaxRequestTarget pTarget, Form<?> pForm) { FileUpload fileUpload = fileUploadField.getFileUpload(); String fileName = fileUpload.getClientFileName(); try { File currentEngineerDir = new File(uploadFolderPath); if (!currentEngineerDir.exists()) { currentEngineerDir.mkdir(); } fileUpload.writeTo(new File(currentEngineerDir, fileName)); } catch (Exception ex) { log.error("Can't upload attachment: " + ex.getMessage(), ex); ImageUploadContentPanel.this.error("Can't upload attachment"); pTarget.add(feedback); return; } finally { fileUpload.closeStreams(); } ImageFileDescription imageFileDescription = new ImageFileDescription(fileName); imageFileDescription.setContentType(fileUpload.getContentType()); onImageUploaded(imageFileDescription, pTarget); } @Override protected void onError(AjaxRequestTarget pTarget, Form<?> pForm) { pTarget.add(feedback); } }); add(form); }