博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Java.Web】MVC —— Action的验证器 —— Validator
阅读量:4005 次
发布时间:2019-05-24

本文共 4330 字,大约阅读时间需要 14 分钟。

验证器 —— Validator

在执行Action时,输入验证时一个重要的步骤。验证范围从简单的任务到复杂的任务都有,例如简单的有检验某个输入域中是否有值,复杂的有验证信用卡号码等。

Java社区发布了 JSR 303 "Bean Validation",将Java中的输入验证标准化。

现代的MVC框架经常同时提供编程式和声明式的验证方法。

示例

基于 MVC - 基于Filter Dispatcherr的Model2 - 示例 一节:

添加如下的Validator - ProductValidator.java

package com.gof.test.validator;import java.util.List;import java.util.ArrayList;import com.gof.test.bean.ProductForm;import com.sun.tools.javah.LLNI;public class ProductValidator {	public List
validate(ProductForm productForm){ List
errors = new ArrayList
(); String name = productForm.getName(); if (name == null || name.trim().isEmpty()){ errors.add("Product must have a name"); } String price = productForm.getPrice(); if (price == null || price.trim().isEmpty()){ errors.add("Price must have a price"); }else{ try{ Float.parseFloat(price); }catch (NumberFormatException e){ errors.add("Invalid price value"); } } return errors; }}

修改上一个的Filter为:

package com.gof.test.filter;import java.io.IOException;import java.util.List;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.gof.test.action.SaveProductAction;import com.gof.test.bean.Product;import com.gof.test.bean.ProductForm;import com.gof.test.validator.ProductValidator;public class DispatcherFilter implements Filter {	public void init(FilterConfig filterConfig) throws ServletException {		// TODO Auto-generated method stub	}	public void doFilter(ServletRequest req, ServletResponse resp,			FilterChain chain) throws IOException, ServletException {		String uri = ((HttpServletRequest)req).getRequestURI();		int lastIndex = uri.lastIndexOf("/");		String action = uri.substring(lastIndex + 1);		String dispatchUrlString = null;				if (action.equals("product_input")){			dispatchUrlString = "/jsp/controller/ProductForm.jsp";		}else 		if (action.equals("product_save")){			ProductForm productForm = new ProductForm();						productForm.setName(req.getParameter("name"));			productForm.setDescription(req.getParameter("description"));			productForm.setPrice(req.getParameter("price"));						// begin validate			ProductValidator productValidator = new ProductValidator();			List
errors = productValidator.validate(productForm); // end validate if (errors.isEmpty()){ Product product = new Product(); product.setName(productForm.getName()); product.setDescription(productForm.getDescription()); product.setPrice(Float.parseFloat(productForm.getPrice())); SaveProductAction saveProductAction = new SaveProductAction(); saveProductAction.save(product); req.setAttribute("product", product); dispatchUrlString = "/jsp/controller/ProductDetails.jsp"; }else{ req.setAttribute("errors", errors); req.setAttribute("form", productForm); dispatchUrlString = "/jsp/controller/ProductForm.jsp"; } } if (dispatchUrlString != null){ RequestDispatcher rDispatcher = req.getRequestDispatcher(dispatchUrlString); rDispatcher.forward(req, resp); }else{ chain.doFilter(req, resp); } } public void destroy() { // TODO Auto-generated method stub }}

修改 ProductForm.jsp如下:

<%@ page language="java" contentType="text/html; charset=utf-8"    pageEncoding="utf-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Add Product Form

Add a product

  • ${error}

Product Name:
Description:
Price:

访问如下URL:

http://localhost:8080/base-webapp/product_input

输入错误信息,提交:

你可能感兴趣的文章
在C++中使用Lua
查看>>
在Dll中调用自身的位图资源
查看>>
IP校验和详解
查看>>
C++中使用Mongo执行count和distinct运算
查看>>
一些socket的编程经验
查看>>
socket编程中select的使用
查看>>
C++获取文件大小常用技巧分享
查看>>
未来5年大机遇:做贩卖多巴胺的超级玩家
查看>>
关于AIS编码解码的两个小问题
查看>>
GitHub 万星推荐:黑客成长技术清单
查看>>
可以在线C++编译的工具站点
查看>>
关于无人驾驶的过去、现在以及未来,看这篇文章就够了!
查看>>
所谓的进步和提升,就是完成认知升级
查看>>
昨夜今晨最大八卦终于坐实——人类首次直接探测到了引力波
查看>>
如何优雅、机智地和新公司谈薪水?
查看>>
为什么读了很多书,却学不到什么东西?
查看>>
长文干货:如何轻松应对工作中最棘手的13种场景?
查看>>
关于WebClient超时问题
查看>>
创业公司如何与巨头竞争?利用好这9大优势是关键
查看>>
读书 | 如何像沉迷游戏一样对工作上瘾?
查看>>