1

更新: null 値が渡される原因はenctype="multipart/form-data". 下の課題が残っています。


ユーザーがドキュメントをアップロードできるSpring MVCページをセットアップしようとしています。私は周りを見回して、これを実装する方法(「commons-fileupload」と「commons-io」を使用)について一般的な考えを持っているように見えるので、以下は私のビュー、コントローラー、およびモデルです。

意見:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<%@ page session="false" %>
<html>
<head>
<title>Upload Document</title>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script type="text/javascript">     

    </script>
    <script type="text/javascript" src="resources/rulesextractor.js"></script>
    <link rel="stylesheet" type="text/css" href="./resources/css/rulesextractor.css" />     
</head>
<body>
<c:import url = "./header.jsp">
    <c:param name = "title" value = "Upload Document"/>
    <c:param name = "region" value = "${region}"/>
</c:import>
<br>
    Please choose a Document to upload
<br>

<form:form method="POST" modelAttribute="uploadForm" commandName="uploadForm" name="uploadForm" id="uploadForm" enctype="multipart/form-data">
    <form:input path="fileData" name="fileData" type="file"/>
<br>
    <input type="submit" name="submit" value="Submit" id="subbtn"/>
    <input type="button" value="Main Menu" onclick="back();"/>
</form:form>

</body>
</html>

コントローラ:

@Controller
public class UploadController extends BaseController {
private static final Logger logger = LoggerFactory.getLogger(FlowController.class);

//@Autowired
//private UserPreferences userPreferences;  

@Autowired 
GenericSearchBO genericSearchBO;

@RequestMapping(value = "upload", method = RequestMethod.GET)
public String getUploadPage(Model m){
    logger.info("UploadController: Getting Upload page");
    updateRegionOnModel(m);
    m.addAttribute(new UploadForm());
    return "/pages/upload";
}
@RequestMapping(method = RequestMethod.POST)
public String create(@Valid UploadForm UploadForm, BindingResult result){
    if (result.hasErrors())
    {
      for(ObjectError error : result.getAllErrors())
      {
        System.err.println("Error: " + error.getCode() +  " - " + error.getDefaultMessage());
      }
      return "/pages/upload";
    }

    // Some type of file processing...
    System.err.println("-------------------------------------------");
    //.getOriginalFilename()
    System.err.println("Test upload: " + UploadForm.getFileData());
    System.err.println("-------------------------------------------");

    return "redirect:/pages/upload";
}
}

モデル:

public class UploadForm {

private CommonsMultipartFile fileData;

public CommonsMultipartFile getFileData() {
    System.out.println("REACHED GET METHOD");
    return fileData;
}
public void setFileData(CommonsMultipartFile fileData) {
    System.out.println("REACHED SET METHOD");
    this.fileData = fileData;
}
}

私はSpringとMVC全般に不慣れですが、ゆっくりとコツをつかんでいます。ここでの問題は、実際にはコントローラーのpublic String create(@Valid UploadForm UploadForm, BindingResult result)メソッドを入力しているのですが、UploadForm が null 値として渡されており、私の人生ではそれを理解できず、かなりイライラしています。どんな助けやヒントも大歓迎です。ありがとう!

4

3 に答える 3

1

servlet.xml に以下を追加する必要があります。

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- one of the properties available; the maximum file size in bytes -->
    <property name="maxUploadSize" value="100000"/>
</bean>
于 2013-05-08T22:27:21.227 に答える
0

This is achievbale using multipart/form-data

<form:form id="" action="xxx.do" method="post"
      modelAttribute="uploadFile"  enctype="multipart/form-data">  
<form:input path="data" id="data" type="file" />
</form:form>

Model class

public class uploadFile{
       private CommonsMultipartFile data; 
       //getter and setter
}

In the controller

@RequestMapping(value = "/upload", method = RequestMethod.POST)  
public ModelAndView fileUpload(uploadFile fileuploaded,
                               BindingResult result, 
                               HttpSession session){
                       ...
}

Read the file

BufferedReader br = new BufferedReader(
new InputStreamReader(fileuploaded.getFileData().getInputStream()));
于 2013-03-07T10:00:41.107 に答える