java - Spring MVC。 POST 表单未绑定(bind)

标签 java spring jsp spring-mvc

我有一些简单的 Man 类,其中包含构造函数、getter 和 setter

public class Man {

    @Size(min = 3, max = 20, message = "Username must be between 3 and 20 characters long.")
    @Pattern(regexp="^[a-zA-Z0-9]+$", message = "Username must be alphanumeric with no spaces")
    private String name;

    @Size(min = 1, max = 2, message = "Age must be between 1 and 2 characters long")
    @Pattern(regexp = "^[0-9]+$", message = "Age must be numerical with no spaces")
    private String age;

    Man(){

    }

    Man(String name, String age){
        super();
        this.name = name;
        this.age = age;
    }

    public String getName(){
        return name;
    }

    public String getAge(){
        return age;
    }

    public void setName(String name){
        this.name = name;
    }

    public void setAge(String age){
        this.age = age;
    }


}

IT服务:

@Service
public class ManService {
Map<String, Man> people = new HashMap();
public void saveMan(Man man){
        System.err.println(man); // after the form is submitted object is created
        System.err.println(man.getName()); // but it name == null
        System.err.println(man.getAge()); // and age == null
        people.put(man.getName(), man);
    }

}

通用 Controller 。 当转到/user?new 时,将创建对象 Man() 并将其插入框 modelAttribute 中,但在提交表单后,Man() 对象的 name 和age 字段将等于空值。

@RequestMapping(value="/user", method = GET, params = "new")
public String outputParam(Model model){
    model.addAttribute("box",new Man());
    return "param";
}

@RequestMapping(value="/user", method = POST)
public String addFromForm(@Valid Man man, BindingResult bindingResult){
    if (bindingResult.hasErrors()) {
        return "param";
    }
    manService.saveMan(man);
    return "redirect:../list";
}

查看:

<sf:form method="POST" modelAttribute="box" enctype="multipart/form-data">
            <fieldset>
                <table cellspacing="0">
                    <tr>
                        <th><sf:label path="name">User name:</sf:label></th>
                        <td><sf:input path="name" size="15" /></td>
                        <sf:errors path="name" cssClass="error"/>
                    </tr>
                    <tr>
                        <th><sf:label path="age">Age:</sf:label></th>
                        <td><sf:input path="age" size="20" /></td> 
                        <sf:errors path="name" cssClass="error"/>

                    </tr>
                    <input name="commit" type="submit" value="sent this shit" />
                </table>
            </fieldset>
        </sf:form>

在结果 POST 表单中不绑定(bind)输入字段中的值。

最佳答案

尝试使用这个

@RequestMapping(value="/user", method = POST)
public String addFromForm(@Valid @ModelAttribute("box") Man man, BindingResult bindingResult){
    if (bindingResult.hasErrors()) {
        return "param";
    }
    manService.saveMan(man);
   return "redirect:../list";
}

按照@M的建议。迪努姆

在发出 POST 请求时,您必须对数据和请求进行编码。

HTML 表单提供了三种编码方法。

如果您的表单有一个文件,那么您必须使用 multipart/form-data。

我认为对于正常形式你不应该使用它。而是使用 application/x-www-form-urlencoded (默认情况下)。

关于java - Spring MVC。 POST 表单未绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26502955/

相关文章:

java骰子游戏,我是java初学者,正在苦苦挣扎..任何建议都会很好

java - 使用 Java Mail API 保存草稿消息?

java - jackson 反序列化对象或数组

spring - 无法下载 Spring 框架 jar 文件

java - 使用带有 Maven 插件的 Eclipse,我应该如何设置我的构建以便将其部署到 tomcat?

java - 如何从蓝牙设备检索数据?

java - Spring Boot 应用程序中的 Hibernate/JPA 错误加入

javascript - 在 spring mvc 应用程序中链接资源的正确方法

javascript - 从单击它的 html 表的行中预填充表单字段。(所有这一切都应该发生在 jsp 上)

java - 如何在应用程序中隐藏jsp文件夹路径和文件名