Spring 和 Velocity - 表单处理

Spring and Velocity - form handling

我用谷歌搜索,但找不到完整的答案。如果我使用 Velocity 模板作为视图,如何处理来自 Spring 的表单? 假设我有以下形式:

<form action="" method="POST" id="newThreadForm">
    <input type="text" placeholder="Title" id="title"/>
    <input type="text" placeholder="Author" id="author"/>
    <input type="text" placeholder="E-mail" id="email">
    <!-- other fields... -->
</form>

并有一个简单的 class:

public class Post {
    private int id;
    private String author;
    private String email;
    private String title;
    //other fields

    //getters and setters
}

如何将用户在表单中键入的数据转换为我的 Controller 方法中的 Post 对象?

 @RequestMapping(value="path/to/", method=RequestMethod.POST)
 public String newThread(Model model) {
     //what should be there?
     return "view-name"; 
 }

我是否需要创建一个新的 class,类似于 public class NewThreadForm?将 BindingResult 参数添加到方法中?或者我该怎么办?感谢您的回答。

UPD:我写道:

@RequestMapping(value="/{board}/new", method=RequestMethod.POST)
public String newThread(Model model, @PathVariable("board") String boardName, Post post, HttpServletRequest request) {
    log.info("newThread()");
    Board board = new Board();
    board.setName(boardName);
    post.setBoard(board);
    post.setDeletePassword(DigestUtils.md5DigestAsHex(post.getDeletePassword().getBytes()));
    post.setIp(request.getRemoteAddr());
    Thread newThread = new Thread();
    newThread.setOpPost(post);
    threadDao.addThread(newThread);
    return "redirect:/" + boardName; 
}

但是当我发送表单数据时,Spring 显示 400 错误:客户端发送的请求在语法上不正确。第一行 log.info("newThread()"); 没有运行。怎么了?

UPD2:这是 "id" 的原因,而不是 html

形式的 "name" 属性

public String newThread(Post post, Model model) { ... } 应该可以。您将在方法中获得一个填充的 Post 实例,您可以验证、持久化等