【问题标题】:Get form's multiple inputs with the same name in spring mvc在spring mvc中获取表单的多个同名输入
【发布时间】:2018-01-31 14:06:07
【问题描述】:

我的jsp页面中有一些输入字段,这些字段可以动态创建或删除。所以我必须将输入字段映射到spring mvc的@ModelAttributes。但我不知道如何映射输入字段。

我想提交一个包含以下内容的表单:

<form enctype="multipart/form-data">
    <!-- code omitted -->

    <div>
        <input type="text" name="content">
        <input type="file" name="file">
    </div>
    <div>
        <input type="text" name="content">
        <input type="file" name="file">
    </div>
    <div>
        <input type="text" name="content">
        <input type="file" name="file">
    </div>
</form>

并且那些字段应该被引导到Java类(@ModelAttribute):

package com.musicovery12.cookingstep.web.command;

import java.util.Arrays;
import java.util.List;


public class AddRecipeCommand {

    private String mainImageUrl;
    private String foodName;
    private String kcal;
    private String ingredients;
    private String foodDescription;

    // I do not know how to map into this field.
    private List<RecipeStep> recipeSteps;

    private String videoUrl;


    public String getMainImageUrl() {
        return mainImageUrl;
    }
    public void setMainImageUrl(String mainImageUrl) {
        this.mainImageUrl = mainImageUrl;
    }
    public String getFoodName() {
        return foodName;
    }
    public void setFoodName(String foodName) {
        this.foodName = foodName;
    }
    public String getKcal() {
        return kcal;
    }
    public void setKcal(String kcal) {
        this.kcal = kcal;
    }
    public String getIngredients() {
        return ingredients;
    }
    public void setIngredients(String ingredients) {
        this.ingredients = ingredients;
    }
    public String getFoodDescription() {
        return foodDescription;
    }
    public void setFoodDescription(String foodDescription) {
        this.foodDescription = foodDescription;
    }
    public List<RecipeStep> getRecipeSteps() {
        return recipeSteps;
    }
    public void setRecipeSteps(List<RecipeStep> recipeSteps) {
        this.recipeSteps = recipeSteps;
    }
    public String getVideoUrl() {
        return videoUrl;
    }
    public void setVideoUrl(String videoUrl) {
        this.videoUrl = videoUrl;
    }
    @Override
    public String toString() {
        return "AddRecipeCommand [mainImageUrl=" + mainImageUrl + ", foodName="
                + foodName + ", kcal=" + kcal + ", ingredients=" + ingredients
                + ", foodDescription=" + foodDescription + ", recipeSteps="
                + recipeSteps + ", videoUrl=" + videoUrl + "]";
    }
}

该命令类具有非原始类型的属性。这是RecipeStep:

package com.musicovery12.cookingstep.web.command;

import org.springframework.web.multipart.MultipartFile;

public class RecipeStep {
    private String content;
    private MultipartFile image;

    public RecipeStep() {}

    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public MultipartFile getImage() {
        return image;
    }
    public void setImage(MultipartFile image) {
        this.image = image;
    }

    @Override
    public String toString() {
        return "RecipeStep [content=" + content + ", image=" + image + "]";
    }


}

所以我的问题是, 如何将表单的输入字段映射到上面的 java 类中? 是否可以通过更改输入字段的名称来实现?那怎么办?

【问题讨论】:

    标签: java html spring forms jsp


    【解决方案1】:
    public class MultipleFileUploadForm {
     
        private List<MultipartFile> files;
     
            public List<MultipartFile> getFiles() {
                return files;
            }
     
            public void setFiles(List<MultipartFile> files) {
                this.files = files;
            } 
     
    }
    
    public @ResponseBody String handleFileUpload(@ModelAttribute("multipleFileUploadForm") MultipleFileUploadForm multipleFileUploadForm){
    
    }
    

    在控制器中添加@ModelAttribute

    【讨论】:

    • 我做到了。这是因为 JSP 中 form 标记的 enctype 上的拼写错误。我可以通过命名 field[0] field[1] field[2] field[n] 来获取字段的值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 2012-11-26
    • 2019-05-11
    • 1970-01-01
    • 2022-08-05
    • 2020-02-18
    相关资源
    最近更新 更多