Reputation: 261
I'm using Spring MVC 3 and I have the following Controller
@RequestMapping(value="FileUploadForm",method=RequestMethod.GET)
public String showForm(ModelMap model){
UploadForm form = new UploadForm();
model.addAttribute("FORM", form);
return "FileUploadForm";
}
@RequestMapping(value="FileUploadForm",method=RequestMethod.POST)
public ModelAndView processForm(@ModelAttribute(value="FORM") UploadForm form,BindingResult result){
if(!result.hasErrors()){
FileOutputStream outputStream = null;
String filePath = System.getProperty("java.io.tmpdir") + "/" + form.getFile().getOriginalFilename();
try {
outputStream = new FileOutputStream(new File(filePath));
outputStream.write(form.getFile().getFileItem().get());
outputStream.close();
System.out.println(form.getName());
return new ModelAndView(new RedirectView("success?Filepath="+filePath, true, true, false));
} catch (Exception e) {
System.out.println("Error while saving file");
return new ModelAndView("FileUploadForm");
}
}else{
return new ModelAndView("FileUploadForm");
}
}
This controller get the filepath and use to do a blast
@RequestMapping(value="success")
public String blasta(@ModelAttribute("Filepath") String filepath, Model model){
Blast sb = new Blast("somepath");
String[] blastIt = sb.blast("somepath", filepath);
String newLine = System.getProperty("line.separator");
ArrayList<Object> result = new ArrayList<>();
for (int i = 5; i < blastIt.length; i++) {
if(blastIt[i].startsWith("Lambda")){
break;
} else {
seila.add(blastIt[i]);
System.out.println(blastIt[i]);
}
model.addAttribute("RESULT", result);
}
File f1 = new File(filepath);
f1.delete();
return "success";
}
Everything works fine, but I still get the filepath in the url.
http://localhost:8081/Ambase/success?Filepath=filePath
And I want this way if it's possible
http://localhost:8081/Ambase/success
Upvotes: 3
Views: 7705
Reputation: 15574
try adding this code to servlet-config.xml
<mvc:annotation-driven ignoreDefaultModelOnRedirect="true" />
Upvotes: 3
Reputation: 4483
To avoid this issue you should use RedirectAttributes
. It will add the value of filePath to the redirect view params and you can get that in the controller blasta.
To achieve this you need to add one more parameter in the controller function processForm. At the end of all the parameters add RedirectAttributes attributes
and then add following line just above the RedirectView statement.
attributes.addFlashAttribute("Filepath",filePath);
And then you can get this attribute in the ModelMap inside blasta controller function.
Hope this helps you. Cheers.
Upvotes: 0