Spring MVC表单设置字段为null

时间:2013-08-14 13:26:47

标签: spring spring-mvc tiles

我正在使用Tiles 3,JPA和所有其他很酷的东西学习Spring MVC。我创建了一个表单来发送数据,下面是表单:

<form:form method="POST" action="/users/save" enctype="multipart/form-data" modelAttribute="formUsuario">
    <form:label path="username" for="username">Username</form:label>
    <form:input type="text" id="username" path="username" class="span4" value="${user.username}" />
    <form:label path="firstName" for="firstName">First name</form:label>
    <form:input type="text" id="firstName" path="firstName" class="span4" value="${user.firstName}" />
</form:form>

控制器内部添加新记录的方法:

@Secured("ROLE_USER")
@RequestMapping(value = "/new", method = RequestMethod.GET)
public String getNew(@ModelAttribute("formUsuario") br.com.rodrigoferra.domain.User user) {
    logger.info("Add new user");
    return "users/edit";
}

保存新记录的方法:

@Secured("ROLE_USER")
@RequestMapping(value = "/save", method = RequestMethod.POST)
public @ResponseBody String doSave(@ModelAttribute("formUsuario") br.com.rodrigoferra.domain.User user, BindingResult results, Model model) {
    if(results.hasErrors()) {
        return "users/edit";
    }
    user = userRepository.save(user);
    logger.info("Username: " + user.getUsername());
    return "redirect:/users/";
}

它正在保存记录,但它将所有内容保存为Null!来自表格的数据正由控制器接收。我搜索了很多,并找到了相同的例子,但我不能让我的工作!

我错过了任何配置吗?

谢谢,抱歉我的英语不好。

编辑:

用户bean:

@Entity(name="users")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue( strategy = GenerationType.IDENTITY)
    private Long id;

    private String firstName;
    private String lastName;

    @Column(unique=true)
    private String username;

    private String password;
    @Transient
    private String passwordConfirmation;

    private Date birthdate;

    private String signature;
    private String email;
    private String sex;

    private int active;

1 个答案:

答案 0 :(得分:3)

使用Firebug或类似工具查看表单字段值是否正确包含在请求中,并将请求发送到正确的URI。

user中收到请求后立即记录(或调试)并检查doSave()对象内容。

记录(或调试)并检查user中的userRepository.save()对象内容,以确保在保留之前所有值都可用。

以下可能是实际原因,但首先检查上述情况会消除其他可能性

删除表单定义中的enctype="multipart/form-data",因为此表单不打算发送二进制数据 检查以下内容以获取更多信息:
What does enctype='multipart/form-data' mean?
Form content types in HTML 4 spec
Multipart form data encoding in HTML 5 spec