fileUploadField uploads even when it shouldn't

2008-02-21 Thread Dan Kaplan
Hello,

 

I've made an upload form and wanted to add a cancel button to it.  The
cancel button is clicked if the user decides he doesn't want to upload
(before he uploads) and should redirect back to another page.  This works
pretty well except I noticed that if the user chooses a file then clicks the
cancel button, the file starts uploading anyway!  Here's the code that does
this.  I can't see why it's happening:

 

 

import org.apache.wicket.authorization.strategies.role.Roles;

import
org.apache.wicket.authorization.strategies.role.annotations.AuthorizeInstant
iation;

import
org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadProgressBar;

import org.apache.wicket.extensions.wizard.CancelButton;

import org.apache.wicket.markup.html.WebPage;

import org.apache.wicket.markup.html.form.Form;

import org.apache.wicket.markup.html.form.TextField;

import org.apache.wicket.markup.html.form.Button;

import org.apache.wicket.markup.html.form.upload.FileUpload;

import org.apache.wicket.markup.html.form.upload.FileUploadField;

import org.apache.wicket.markup.html.panel.FeedbackPanel;

import org.apache.wicket.model.PropertyModel;

import org.apache.wicket.util.file.Files;

import org.apache.wicket.util.file.Folder;

 

import java.io.File;

 

@AuthorizeInstantiation(Roles.USER)

public class CreateAReport extends WebPage {

 

private String reportName;

 

public CreateAReport() {

final FileUploadForm form = new FileUploadForm(form);

final UploadProgressBar progressBar = new
UploadProgressBar(progress, form);

 

form.add(progressBar);

form.add(new TextField(name, new PropertyModel(this,
reportName)).setRequired(true));

 

Button submit = new Button(submitbutton) {

public void onSubmit() {

form.upload();

setResponsePage(CustomReport.class);

}

};

form.add(submit);

 

Button cancel = new Button(cancelbutton) {

public void onSubmit() {

setResponsePage(ReportList.class);

}

};

cancel.setDefaultFormProcessing(false);

form.add(cancel);



add(form);

 

add(new FeedbackPanel(feedback));

}

 

public String getReportName() {

return reportName;

}

 

public void setReportName(String reportName) {

this.reportName = reportName;

}

 

private class FileUploadForm extends Form {

protected FileUploadField fileUploadField;

protected File newFile;

 

/**

 * Construct.

 *

 * @param name Component name

 */

public FileUploadForm(String name) {

super(name);

 

// set this form to multipart mode (allways needed for uploads!)

setMultiPart(true);

 

// Add one file input field

add(fileUploadField = new FileUploadField(fileInput));

fileUploadField.setRequired(true);

 

// Set maximum size to 100K for demo purposes

//setMaxSize(Bytes.kilobytes(100));

}

 

public void upload() {

final FileUpload upload = fileUploadField.getFileUpload();

if (upload != null) {

// Create a new file

newFile = new File(getUploadFolder(),
upload.getClientFileName());

 

// Check new file, delete if it allready existed

checkFileExists(newFile);

try {

// Save to new file

newFile.createNewFile();

upload.writeTo(newFile);

} catch (Exception e) {

throw new IllegalStateException(Unable to write file: 
+ newFile.getAbsolutePath());

}

}

}

 

public File getFile() {

return newFile;

}

}

 

private void checkFileExists(File newFile) {

if (newFile.exists()) {

// Try to delete the file

if (!Files.remove(newFile)) {

throw new IllegalStateException(Unable to overwrite  +
newFile.getAbsolutePath());

}

}

}

 

private Folder getUploadFolder() {

Folder uploadFolder = new
Folder(System.getProperty(java.io.tmpdir), wicket-uploads);

// Ensure folder exists

uploadFolder.mkdirs();

return uploadFolder;

}

 

}



Re: fileUploadField uploads even when it shouldn't

2008-02-21 Thread Igor Vaynberg
its happening because you are using input type=submit for the cancel
button, which of course submits the form. you should instead use a
link for cancel buttons.  you can attach a link to a input
type=button if you want cancel to still be a button btw...

-igor

On Thu, Feb 21, 2008 at 5:56 PM, Dan Kaplan [EMAIL PROTECTED] wrote:
 Hello,



  I've made an upload form and wanted to add a cancel button to it.  The
  cancel button is clicked if the user decides he doesn't want to upload
  (before he uploads) and should redirect back to another page.  This works
  pretty well except I noticed that if the user chooses a file then clicks the
  cancel button, the file starts uploading anyway!  Here's the code that does
  this.  I can't see why it's happening:





  import org.apache.wicket.authorization.strategies.role.Roles;

  import
  org.apache.wicket.authorization.strategies.role.annotations.AuthorizeInstant
  iation;

  import
  org.apache.wicket.extensions.ajax.markup.html.form.upload.UploadProgressBar;

  import org.apache.wicket.extensions.wizard.CancelButton;

  import org.apache.wicket.markup.html.WebPage;

  import org.apache.wicket.markup.html.form.Form;

  import org.apache.wicket.markup.html.form.TextField;

  import org.apache.wicket.markup.html.form.Button;

  import org.apache.wicket.markup.html.form.upload.FileUpload;

  import org.apache.wicket.markup.html.form.upload.FileUploadField;

  import org.apache.wicket.markup.html.panel.FeedbackPanel;

  import org.apache.wicket.model.PropertyModel;

  import org.apache.wicket.util.file.Files;

  import org.apache.wicket.util.file.Folder;



  import java.io.File;



  @AuthorizeInstantiation(Roles.USER)

  public class CreateAReport extends WebPage {



 private String reportName;



 public CreateAReport() {

 final FileUploadForm form = new FileUploadForm(form);

 final UploadProgressBar progressBar = new
  UploadProgressBar(progress, form);



 form.add(progressBar);

 form.add(new TextField(name, new PropertyModel(this,
  reportName)).setRequired(true));



 Button submit = new Button(submitbutton) {

 public void onSubmit() {

 form.upload();

 setResponsePage(CustomReport.class);

 }

 };

 form.add(submit);



 Button cancel = new Button(cancelbutton) {

 public void onSubmit() {

 setResponsePage(ReportList.class);

 }

 };

 cancel.setDefaultFormProcessing(false);

 form.add(cancel);



 add(form);



 add(new FeedbackPanel(feedback));

 }



 public String getReportName() {

 return reportName;

 }



 public void setReportName(String reportName) {

 this.reportName = reportName;

 }



 private class FileUploadForm extends Form {

 protected FileUploadField fileUploadField;

 protected File newFile;



 /**

  * Construct.

  *

  * @param name Component name

  */

 public FileUploadForm(String name) {

 super(name);



 // set this form to multipart mode (allways needed for uploads!)

 setMultiPart(true);



 // Add one file input field

 add(fileUploadField = new FileUploadField(fileInput));

 fileUploadField.setRequired(true);



 // Set maximum size to 100K for demo purposes

  //setMaxSize(Bytes.kilobytes(100));

 }



 public void upload() {

 final FileUpload upload = fileUploadField.getFileUpload();

 if (upload != null) {

 // Create a new file

 newFile = new File(getUploadFolder(),
  upload.getClientFileName());



 // Check new file, delete if it allready existed

 checkFileExists(newFile);

 try {

 // Save to new file

 newFile.createNewFile();

 upload.writeTo(newFile);

 } catch (Exception e) {

 throw new IllegalStateException(Unable to write file: 
  + newFile.getAbsolutePath());

 }

 }

 }



 public File getFile() {

 return newFile;

 }

 }



 private void checkFileExists(File newFile) {

 if (newFile.exists()) {

 // Try to delete the file

 if (!Files.remove(newFile)) {

 throw new IllegalStateException(Unable to overwrite  +
  newFile.getAbsolutePath());

 }

 }

 }



 private Folder getUploadFolder() {

 Folder uploadFolder = new
  Folder(System.getProperty(java.io.tmpdir), wicket-uploads);

 // Ensure folder exists

 uploadFolder.mkdirs();

 return uploadFolder;

 }



  }