Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms Spring portlet表单:@ModelAttribute未填充_Forms_Spring Mvc_Jstl_Liferay_Portlet - Fatal编程技术网

Forms Spring portlet表单:@ModelAttribute未填充

Forms Spring portlet表单:@ModelAttribute未填充,forms,spring-mvc,jstl,liferay,portlet,Forms,Spring Mvc,Jstl,Liferay,Portlet,我是Spring的初学者,我想知道为什么我的ModelAttribute没有填充(所有的值都是空的) 我想从中创建一个多部分,允许我上传csv文件以及csv文件的类型 我的代码如下: 在CSVUpload portlet.xml中: CSVFileUploadVO.java import org.springframework.web.multipart.commons.CommonsMultipartFile; public class CSVFileUploadVO { privat

我是Spring的初学者,我想知道为什么我的ModelAttribute没有填充(所有的值都是空的)

我想从中创建一个多部分,允许我上传csv文件以及csv文件的类型

我的代码如下:

在CSVUpload portlet.xml中:

CSVFileUploadVO.java

import org.springframework.web.multipart.commons.CommonsMultipartFile;

public class CSVFileUploadVO {
  private String fileType;
  private CommonsMultipartFile csvFile;
  private String message;

  public CSVFileUploadVO() {
  }

  public String getFileType() {
    return fileType;
  }

  public void setFileType(String fileType) {
    this.fileType = fileType;
  }

  public String getMessage() {
          return message;
  }

  public void setMessage(String message) {
          this.message = message;
  }

  public CommonsMultipartFile getCsvFile() {
          return csvFile;
  }

  public void setCsvFile(CommonsMultipartFile csvFile) {
          this.csvFile = csvFile;
  }
}
表单JSP

All taglibs imported...
<portlet:actionURL var="fileUploadURL">
    <portlet:param name="action" value="uploadCsvToDatabase" />
</portlet:actionURL>

<form:form method="post" action="${fileUploadURL}"
    commandName="csvFileUploadVO" enctype="multipart/form-data">
    <table>
        <tbody>
            <tr>
                <td><label>Department:</label></td>
                <td><form:select path="fileType">
                        <form:option value="BRMAdd" label="BRM Add" />
                        <form:option value="FOSAdmin" label="FOS Admin" />
                        <form:option value="FOSRM" label="FOS RM" />
                        <form:option value="FOSTeam" label="FOS Team" />
                        <form:option value="ITRelationships" label="IT Relationships" />
                        <form:option value="HRAttendance" label="HR Attendance" />
                        <form:option value="iCareCallReport" label="iCare Call Report" />
                    </form:select></td>
            </tr>
            <tr>
                <td><label>Specify your File:</label></td>
                <td><form:input path="csvFile" type="file" /></td>
            </tr>
            <tr>
            <tr>
                <td colspan="100%"><input type="submit" value="Submit" /></td>
            </tr>
            <tr>
                <td colspan="100%">${csvFileUploadVO.message}</td>
            </tr>
        </tbody>
    </table>
</form:form>
导入的所有标记库。。。
部门:
指定您的文件:
${csvFileUploadVO.message}
我知道这看起来像是在请你帮我解决一个问题,但我已经坚持了8个小时,阅读了所有我可以在谷歌上搜索的资源和stackoverflow网站。尽管如此,我还是什么也没找到

感谢您在这方面的帮助。

您需要特别了解
RequestMapping
,其中参数为
MultipartFile

@RequestMapping(value = "/form", method = RequestMethod.POST)
  public String handleFormUpload(@RequestParam("name") String name,
    @RequestParam("file") MultipartFile file) {

您必须在JSP表单中定义ModelAttribute,如下所示:

<form:form method="post" action="${fileUploadURL}"
modelAttribute="csvFileUploadVO" enctype="multipart/form-data">

Liferay 6.0.5和Spring 3.2.2.版本:

我尝试过编辑spring类,但这个问题有更简单的解决方案。只需检查您的CommonPortletMultipartResolver是否已经初始化。它在spring.xml中声明的事实并不意味着它已加载

如果未初始化,则请求的文件部分将永远不会转换为commons MultipartFile,因为您的请求将不是commons Multipart请求


如果org.springframework.web.portlet.DispatcherPortlet生命周期加载了CommonPortletMultipartResolver,并且spring使用此类,则它将被调用。

您的多部分解析器必须具有id
portletMultipartResolver
,并且类型为
org.springframework.web.portlet.multipart.CommonPortletMultipartResolver

<bean id="portletMultipartResolver" class="org.springframework.web.portlet.multipart.CommonsPortletMultipartResolver">
</bean>

这个问题有更简单的解决方案,不需要覆盖spring类。检查CommonPortletMultipartResolver是否已初始化。如果未初始化,则请求的文件部分将永远不会转换为commons MultipartFile,因为您的请求将不是commons Multipart请求。
<form:form method="post" action="${fileUploadURL}"
modelAttribute="csvFileUploadVO" enctype="multipart/form-data">
<bean id="portletMultipartResolver" class="org.springframework.web.portlet.multipart.CommonsPortletMultipartResolver">
</bean>