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
实例,您可以验证、持久化等
我用谷歌搜索,但找不到完整的答案。如果我使用 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
实例,您可以验证、持久化等