- 内容提要
- 作者简介
- 译者简介
- 前言
- HTTP
- Servlet 和 JSP
- 下载 Spring 或使用 STS 与 Maven/Gradle
- 手动下载 Spring
- 使用 STS 和 Maven/Gradle
- 下载 Spring 源码
- 本书内容简介
- 下载示例应用
- 第 1 章Spring 框架
- 第 2 章模型 2 和 MVC 模式
- 第 3 章Spring MVC 介绍
- 第 4 章基于注解的控制器
- 第 5 章数据绑定和表单标签库
- 第 6 章转换器和格式化
- 第 7 章验证器
- 第 8 章表达式语言
- 第 9 章JSTL
- 第 10 章国际化
- 第 11 章上传文件
- 第 12 章下载文件
- 第 13 章应用测试
- 附录 A Tomcat
- 附录 B Spring Tool Suite 和 Maven
- 附录 C Servlet
- 附录 D JavaServer Pages
- 附录 E 部署描述符
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
7.6 Controller 类
在 Controller 类中通过实例化 validator 类,可以使用 Spring 验证器。清单 7.5 中 Product- Controller 类的 saveProduct 方法创建了一个 ProductValidator,并调用其 validate 方法。为了检验该验证器是否生成错误消息,需在 BindingResult 中调用 hasErrors 方法。
清单 7.5 ProductController 类
package controller;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import domain.Product;
import validator.ProductValidator;
@Controller
public class ProductController {
private static final Log logger = LogFactory
.getLog(ProductController.class);
@RequestMapping(value = "/add-product")
public String inputProduct(Model model) {
model.addAttribute("product", new Product());
return "ProductForm";
}
@RequestMapping(value = "/save-product")
public String saveProduct(@ModelAttribute Product product,
BindingResult bindingResult, Model model) {
ProductValidator productValidator = new ProductValidator();
productValidator.validate(product, bindingResult);
if (bindingResult.hasErrors()) {
FieldError fieldError = bindingResult.getFieldError();
logger.debug("Code:" + fieldError.getCode() + ", field:"
+ fieldError.getField());
return "ProductForm";
}
// save product here
model.addAttribute("product", product);
return "ProductDetails";
}
}
使用 Spring 验证器的另一种方法是:在 Controller 中编写 initBinder 方法,并将验证器传到 WebDataBinder,并调用其 validate 方法。
@org.springframework.web.bind.annotation.InitBinder
public void initBinder(WebDataBinder binder) {
// this will apply the validator to all request-handling methods
binder.setValidator(new ProductValidator());
binder.validate();
}
将验证器传到 WebDataBinder,会使该验证器应用于 Controller 类中所有处理请求的方法。
或者利用 @javax.validation.Valid 对要验证的对象参数进行注解。例如:
public String saveProduct(@Valid @ModelAttribute Product product,
BindingResult bindingResult, Model model) {
Valid 注解类型是在 JSR 303 中定义的。关于 JSR 303 的相关信息,7.8 节将会讨论。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论