2

我正在使用 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;
4

1 回答 1

3

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

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

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

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

在表单定义中删除enctype="multipart/form-data",因为此表单不打算发送二进制数据。
检查以下内容以获取更多信息:
enctype='multipart/form-data' 是什么意思?
HTML 4 规范中的表单内容类型 HTML 5 规范
中的多部分表单数据编码

于 2013-08-14T14:05:32.427 回答