2013-05-02 37 views
0

我有一个有两个提交按钮的表单。保存按钮将保存一个对象到数据库,同时将上传文件保存到本地目录。发送按钮将自动生成一封电子邮件给收件人。春季文件上传和持久对象

我有什么到目前为止

@RequestMapping(value = "/staff/setter/addPage", method = RequestMethod.POST) 
public String processModule(@RequestParam("name") String name, 
     @RequestParam("file") MultipartFile file, @ModelAttribute("module") 

     Module module, Staff staff, HttpServletRequest request, BindException errors, 
     HttpSession session) {  

      if(request.getParameter("save") != null) 
       { 
    if(module != null){ 

     try { 

      MultipartFile filea = module.getFileData(); 

      InputStream inputStream = null; 
      OutputStream outputStream = null; 
      if (filea.getSize() > 0) { 
      inputStream = filea.getInputStream(); 
      outputStream = new FileOutputStream("C:\\Test\\" 
      + filea.getOriginalFilename()); 
      System.out.println("==========Uploaded File 

        Name========="); 
      System.out.println(filea.getOriginalFilename()); 


        System.out.println("===================================="); 
      int readBytes = 0; 
      byte[] buffer = new byte[8192]; 
      while ((readBytes = inputStream.read(buffer, 0, 8192)) != 

       -1) { 
      outputStream.write(buffer, 0, readBytes); 
      } 
      outputStream.close(); 
      inputStream.close(); 
      session.setAttribute("success", "File Uploaded 

      Successfully"); 
      session.setAttribute("uploadFile", "C:\\Test\\" 
      + filea.getOriginalFilename()); 
      } 
      } catch (Exception e) { 
      e.printStackTrace(); 
      } 


//Save specific processing 
    moduleService.save(module); 
    } 
    return "redirect:/staff/setter/addPage"; 
} 

else if(request.getParameter("send") != null) 
{ 
    //Send specific processing. 
    SimpleMailMessage msg = new SimpleMailMessage(this.templateMessage); 
    //msg.setTo(module.getCustomer().getEmailAddress()); 
    msg.setTo(module.getChecker().getEmail()); 
    //msg.setTo(staff.getChecker().getEmail()); 

    msg.setText(
     "Dear " + module.getChecker().getName() 
     //"Dear " + staff.getChecker().getEmail() 
      //+ module.getCustomer().getLastName() 
      + "a coursework has been submitted for checking" 
      + module.getModuleCode() 
      +module.getModuleName()); 
    try{ 
     this.mailSender.send(msg); 
    } 
    catch(MailException ex) { 
     // simply log it and go on... 
     System.err.println(ex.getMessage()); 

} 

} 
return "/staff/setter/view_submission"; 
} 

到目前为止误差

 HTTP Status 400 - The request sent by the client was syntactically incorrect. 

我希望得到任何帮助。

编辑:Jsp页面

<c:url var="processUrl" value="/staff/setter/addPage" /> 
<form:form modelAttribute="module" method="POST" action="${processUrl}" name="module" 

    enctype="multipart/form-data"> 

    <form:hidden path="moduleId" /> 

    <div class="admin"> 
<table> 

    <tr> 

     <td class="module"> 

     </td> 
     <td>Module Code:</td> 

     <td>Module Name:</td> 

    </tr> 
    <tr> 
    <td>Convenor:</td> 
    <td>Checker:</td> 

</tr> 
<tr> 
    <td>Weights:</td> 
</tr> 

    </table> 
    </div> 


<div class ="lecturer"> 
<h4>Lecturer Section</h4> 
<ul> 


<form:label path="fileName">Document Title:</form:label> 
<form:input path="fileName" name="name"/><br/> 

<form:label path="documentPath">Coursework Sample:</form:label> 
<form:input path="documentPath" type="file" name="file" id="file"/><br/> 

<form:label path="liveDate">Live Date:</form:label> 
<form:input path="liveDate"/><br/> 

<form:label path="submissionDate">Submission Date:</form:label> 
<form:input path="submissionDate"/><br/> 

<form:label path="filename">Marked Sample Title:</form:label> 
    <form:input path="filename" id="file" name="name"/><br/> 

<form:label path="markedSamplePath">Marked Sample:</form:label> 
<form:input path="markedSamplePath" type="file" name="file"/><br/> 

</ul> 

</div> 

</form:form> 
+0

什么是你的要求是什么样子? – 2013-05-02 13:36:28

+0

你的意思是jsp页面吗?我会添加它。 – user2259555 2013-05-02 13:43:18

+0

我添加了jsp页面。 – user2259555 2013-05-02 13:46:41

回答

1

如果你希望避免的处理多形式的麻烦和可能给用户一个更好的体验。例如,你的表单数据有错误,用户需要重新提交表单,你的文件上传会丢失。

我使用fineuploader构建上传文件作为隐藏输入和上传自己是单独的请求。

解释这里:Preserving value for <form:input type="file"> with Spring MVC