Spring Can';无法在控制器中选择选项

Spring Can';无法在控制器中选择选项,spring,select,amazon-s3,controller,thymeleaf,Spring,Select,Amazon S3,Controller,Thymeleaf,我有一个表单可以在选择选项中列出bucket,它在选择bucket和file之后将文件上传到bucket,但是我无法在我的控制器中获取所选bucket,文件夹总是返回空字符串,虽然multipartfile没有问题,但我真的想知道为什么! 这周我一直在谷歌上搜索,但没有找到我需要的结果! 我对thymeleaf非常陌生,即使是在spring框架中:( 请帮我解决这个简单的问题:) html文件的一部分,如下所示: <form role="form" enctype="multipart/f

我有一个表单可以在选择选项中列出bucket,它在选择bucket和file之后将文件上传到bucket,但是我无法在我的控制器中获取所选bucket,文件夹总是返回空字符串,虽然multipartfile没有问题,但我真的想知道为什么! 这周我一直在谷歌上搜索,但没有找到我需要的结果! 我对thymeleaf非常陌生,即使是在spring框架中:( 请帮我解决这个简单的问题:)

html文件的一部分,如下所示:

<form role="form" enctype="multipart/form-data" action="#" th:object="${folder}" th:action="@{'/drill/skin/upload'}" method="POST">
  <div class="form-group">
    <label class="form-control-static">Select Bucket</label>
    <select class="form-control" th:field="${folder}">
      <option th:each="bucket : ${buckets}" th:value="${bucket.name}" th:text="${bucket.name}">bucket</option>
    </select>
  </div>

  <label class="form-control-static" for="inputSuccess">Select Upload   File</label>
  <div class="form-group">
    <input type="file" class="form-control" name="uploadFile"/>
  </div>
  <div class="form-group">
    <button class="btn btn-primary center-block" type="submit">Upload</button>
  </div>
</form>

选择铲斗
水桶
选择上载文件
上传
控制器如下:

@RequestMapping(value="/", method=RequestMethod.GET)
public String provideUploadInfo(Model model) {
  List<Bucket> buckets = s3Service.listBuckets();
  model.addAttribute("buckets", buckets);
  model.addAttribute("folder", "com.smartstudy");
  return "index";
}

@RequestMapping(value="/upload", method=RequestMethod.POST)
public String handleFileUpload(
  @ModelAttribute("folder") String folder,
  @RequestParam("uploadFile") MultipartFile uploadFile, Model model) {
  log.info("Bucket: " + folder + ", uploadFile: " +   uploadFile.getOriginalFilename());
  if (!uploadFile.isEmpty() && !folder.isEmpty()) {
    return s3Service.upload(uploadFile, folder);
  }
  return "index";
}
@RequestMapping(value=“/”,method=RequestMethod.GET)
公共字符串provideUploadInfo(模型){
List bucket=s3Service.listbakes();
model.addAttribute(“bucket”,bucket);
model.addAttribute(“文件夹”、“com.smartstudy”);
返回“索引”;
}
@RequestMapping(value=“/upload”,method=RequestMethod.POST)
公共字符串handleFileUpload(
@ModelAttribute(“文件夹”)字符串文件夹,
@RequestParam(“上传文件”)多部分文件上传文件,模型{
log.info(“Bucket:+folder+”,uploadFile:+uploadFile.getOriginalFilename());
如果(!uploadFile.isEmpty()&&!folder.isEmpty()){
返回s3Service.upload(上传文件、文件夹);
}
返回“索引”;
}

您的代码中有几个问题

理想情况下,整个表单应该封装在一个表单支持对象中。在您的例子中,创建一个Java对象,将文件夹和文件包装在一起

class BucketFileForm{

    private MultipartFile uploadFile;
    private String folder;

    public String getFolder() {
        return folder;
    }
    public void setFolder(String folder) {
        this.folder = folder;
    }
    public MultipartFile getUploadFile() {
        return uploadFile;
    }
    public void setUploadFile(MultipartFile uploadFile) {
        this.uploadFile = uploadFile;
    }
}
使此对象在模型中可用,以便可以在视图中访问它

@RequestMapping(value="/", method=RequestMethod.GET)
public String provideUploadInfo(Model model) {
    List<Bucket> buckets = s3Service.listBuckets();
    model.addAttribute("buckets", buckets);

    //replace this
    //model.addAttribute("folder", "com.smartstudy");

    //with
    BucketFileForm bucketFileForm = new BucketFileForm();
    bucketFileForm.setFolder("com.smartstudy");
    model.addAttribute("bucketFileForm", bucketFileForm);

    return "index";
}

代码中有几个问题

理想情况下,整个表单应该封装在一个表单支持对象中。在您的例子中,创建一个Java对象,将文件夹和文件包装在一起

class BucketFileForm{

    private MultipartFile uploadFile;
    private String folder;

    public String getFolder() {
        return folder;
    }
    public void setFolder(String folder) {
        this.folder = folder;
    }
    public MultipartFile getUploadFile() {
        return uploadFile;
    }
    public void setUploadFile(MultipartFile uploadFile) {
        this.uploadFile = uploadFile;
    }
}
使此对象在模型中可用,以便可以在视图中访问它

@RequestMapping(value="/", method=RequestMethod.GET)
public String provideUploadInfo(Model model) {
    List<Bucket> buckets = s3Service.listBuckets();
    model.addAttribute("buckets", buckets);

    //replace this
    //model.addAttribute("folder", "com.smartstudy");

    //with
    BucketFileForm bucketFileForm = new BucketFileForm();
    bucketFileForm.setFolder("com.smartstudy");
    model.addAttribute("bucketFileForm", bucketFileForm);

    return "index";
}

伟大的你是对的,一个表单和一个表单类做任何事情都很简单!伟大的你是对的,一个表单和一个表单类做任何事情都很简单!