表单输入上的Spring MVC绑定覆盖值属性

时间:2013-07-10 10:38:34

标签: java jsp spring-mvc

我有一个将数据发布到Inquiry对象的表单。 Inquiry对象是Controller中的ModelAttribute,它没有明确定义的构造函数。尽管在我的表单中将age输入元素的value属性设置为空字符串,但它仍然为零。这让我觉得它从查询对象获得age的现有值,我们将其初始化为零。有没有办法仍然发布到enquiry.age,但没有在我的页面上显示它的当前值?

我的表格

<form:form commandName="enquiry" method="post" action="mycontext/jsp/enquiry-search">
    <form:input path="name" value=""/>
    <form:input path="age" value=""/>
</form:form>

我的控制器的一部分

    @RequestMapping( value = "/enquiry/{screenType}", method = {RequestMethod.GET, RequestMethod.POST})
@ResponseStatus( HttpStatus.OK )
public String getEnquiryScreen(@ModelAttribute ("enquiry") Enquiry enquiry, @PathVariable("screenType") String screenType) {

    return "enquiry";
}

@ModelAttribute( "enquiry" )
public Enquiry getEnquiry() {
    return new Enquiry();
}

我的咨询课

public class Enquiry {

private String name;
private int age;

public String getName() {
    return name;
}

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

public int getAge() {
    return age;
}

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

1 个答案:

答案 0 :(得分:0)

Thats not how model attributes work.

如果您查询了一个模式分发,那么您的表单无效。

我会有两个方法,一个用于get,一个用于post,POST可以将Inquiry作为一个方法参数与ModelAttribute annaotion一起使用。这将确保对象从请求中获取,而不是使用模型属性公开的方法 - 这只是实例化一个新实例。