1. 程式人生 > >Spring MVC 資料驗證——validate編碼方式

Spring MVC 資料驗證——validate編碼方式

1、匯入jar包

  • 其他的就是一些日誌包(不一定全不需要):jboss-logging-3.1.3.GA.jar、slf4j-log4j12-1.6.1.jar

2、web專案的結構圖

3、專案配置

  • web.xml配置
    Spring mvc專案的最小配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"> <display-name>SpringMVC</display-name> <welcome-file-list> <welcome-file>jsp/hello.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>hello</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1
</load-on-startup> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
  • hello-servlet.xml配置
    通過自動載入
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="controller"> </context:component-scan> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"> <!-- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> --> </bean> <!--資料驗證 編碼方式的配置--> <mvc:annotation-driven validator="accountValidator"/> <bean id="accountValidator" class="dao.AccountValidator"></bean> </beans>

4、src下新增原始碼

  • controller包
    RegisterController類主要有兩個方法,一個用於get,另一個用於post。其中資料驗證是放在registerIF()方法中的。驗證是通過前兩個引數,第一個引數是一個javabean儲存的是註冊使用者的資訊,第二個引數用於資料驗證提交過來的javabean物件。
package controller;
import javax.validation.Valid;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.DataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import dao.Account;
import dao.AccountValidator;

@Controller
@RequestMapping("/register")
public class RegisterController {

    @RequestMapping(method=RequestMethod.GET)
    public String register(Model model){
        if (!model.containsAttribute("account")) {
            model.addAttribute("account",new Account());
        }
        return "register";
    }

    @InitBinder
    public void initBinder(DataBinder binder){
        binder.setValidator(new AccountValidator());
    }

    @RequestMapping(method=RequestMethod.POST)
    public String registerIF(@Valid @ModelAttribute("account")Account account,BindingResult result,Model model){

        System.out.println("使用者名稱:"+account.getUsername());
        if (result.hasErrors()) {
            System.out.println("register faliure.");
            model.addAttribute("message", "註冊失敗");
        }else {
            model.addAttribute("message", "註冊成功");
        }

        return "register";
    }
}
  • dao包
    (1)、javabean類Account,用於儲存註冊使用者資訊
package dao;

import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

public class Account {

    private String username;
    private String password;


    public Account() {
        // TODO Auto-generated constructor stub
    }

    public Account(String username, String password) {
        super();
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }


}

(2)、 AccountValidator用於檢驗Account的輸入使用者資訊
這個就是編碼方式驗證資料的主要類,通過hello-servlet.xml中的自動載入方式,將類載入進去,引入點就是在@Valid註解處。

package dao;

import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

public class AccountValidator implements Validator {

    @Override
    public boolean supports(Class<?> arg0) {
        // TODO Auto-generated method stub
        return Account.class.equals(arg0);
    }

    @Override
    //主要通過這個方法,驗證資料
    public void validate(Object obj, Errors erros) {
        // TODO Auto-generated method stub
        ValidationUtils.rejectIfEmpty(erros, "username", null,"使用者名稱不能為空.");
        ValidationUtils.rejectIfEmpty(erros, "password", null,"密碼不能為空.");
        Account account = (Account) obj;
        if (account.getUsername().length()<3 || account.getUsername().length()>20) {
            erros.rejectValue("username","length","使用者名稱長度在3-20個字串之間");
        }

        if (account.getPassword().length()<6 || account.getPassword().length()>20) {
            erros.rejectValue("password","size","密碼長度在6-20個字元之間");
        }
    }
}

5、加入jsp

在WEB-INF中新建一個jsp目錄,然後新建一個register.jsp檔案,新增如下程式碼:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>註冊介面</title>
</head>
<body>
    <form:form method="post"  modelAttribute="account">
        <label for="username">使用者名稱:</label>
        <form:input type="text" path="username"/>
        <form:errors path="username"/><br><br>

       <label for="pwd">密碼:</label>&nbsp;
        <form:input type="password" path="password"/>
        <form:errors path="password"/>
        <br><br>
        <input type="submit" value="註冊" name="login"/>&nbsp;&nbsp;
    </form:form>
<br><hr>
${message}
</body>
</html>

6、效果演示

這裡寫圖片描述

相關推薦

Spring MVC 資料驗證——validate編碼方式

1、匯入jar包 其他的就是一些日誌包(不一定全不需要):jboss-logging-3.1.3.GA.jar、slf4j-log4j12-1.6.1.jar 2、web專案的結構圖 3、專案配置 web.xml配置 Spring m

Spring MVC 數據驗證——validate編碼方式

end 3.2 content springmvc div 信息 ng- stub 驗證 1、導入jar包 validation-api-1.0.0.GA.jar這是比較關鍵的一個jar包,[email protected]/* */ h

Spring MVC Hibernate驗證

學生 taglib inpu pub ips int css 方法 顯示 下面的示例演示如何使用Spring Web MVC框架在表單中使用錯誤處理和驗證器。 首先使用Eclipse IDE,並按照以下步驟使用Spring Web Framework開發基於動態表單的Web

spring mvc引數驗證

描述: 在使用bean接收前臺傳過來的引數時,如果bean中有接收date行,那麼如果對該引數使用@NotBlank註解,會報如下異常: javax.validation.UnexpectedTypeException: HV000030: No validator could b

Spring MVC 資料繫結和表單標籤庫

資料繫結是將使用者輸入繫結到領域模型的一種特性。 資料繫結的好處: 1. 型別總是為 String 的 HTTP 請求引數,可用於填充不同型別的物件屬性。 2. 當輸入驗證失敗時,會重新生成一個 HTML 表單。 為了高效的使用資料繫結,還需要 Spring 的表單標籤庫。表單標籤庫中包含了可以用在

Spring MVC 資料繫結流程分析

1.    資料繫結流程原理★ ①   Spring MVC 主框架將 ServletRequest  物件及目標方法的入參例項傳遞給 WebDataBinderFactory 例項,以建立 DataBinder 例項物件 ②

spring-MVC普通驗證&&分組驗證

普通驗證 1.所需jar包 2.spring配置檔案 3.html頁面 4.設定properties表單 5.配置java bean驗證 6.後臺驗證程式碼 7.頁面輸出錯誤驗證資訊   8.效果 分組

spring mvc返回json字串的方式

 spring mvc返回json字串的方式 方案一:使用@ResponseBody 註解返回響應體 直接將返回值序列化json            優點:不需要自己再處理 步驟一:

Spring MVC 資料校驗

資料校驗是 Web 應用必須處理的內容,Spring MVC 提供了兩種方法來對使用者的輸入資料進行校驗,一種是 Spring 自帶的 Validation 校驗框架,另一種是利用 JRS-303 驗證框架進行驗證。 Hibernate-Validator 實

Spring MVC---資料繫結和表單標籤

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transi

Spring MVC Controller中解析GET方式的中文引數會亂碼的問題

問題描述 在工作上使用Spring老是碰到一個問題,使用Controller處理GET方式的請求引數時,服務端得到的結果會碰到亂碼,之前翻閱了很多與Java EE相關的很多亂碼處理資料,不管是加過濾器還是統一檔案編碼,都沒能正確解決,後來設計介面時,一直採用先Base64

Spring MVC:圖片驗證碼的生成與返回

效果 程式碼 模型 //分類圖片和儲存圖片數量和路徑 public class ImageGroup { private String name; //圖片組名稱 private int count;//圖片組

HttpClient資料傳輸的編碼方式

約定 1. HttpClient版本:HttpClient4.1 2. 服務端中介軟體:tomcat7 HttpGet請求的URI編碼設定 1. 問題及原因 使用HttpClient的HttpGet方法進行get請求時,如果請求的URI中含有中文引數,則請求的服務端容易出現亂

freemarker+spring mvc驗證

在springmvc+freemarker的驗證問題: @Component public class PositionValidator implements Validator { @Override public boolean supports(Class&l

Spring mvc資料轉換與格式化

Spring mvc資料繫結 spring mvc通過反射機制對目標方法的簽名進行分析,將請求訊息繫結到處理方法入參中。 資料繫結的核心部件是DataBinder。 spring mvc主框架將servletRequest物件及處理方法入參物件例項傳遞給DataBinde

spring mvc 資料繫結 400錯誤

情景:使用在方法中繫結資料的時候,開啟連結,出現400錯誤。 @RequestMapping(value = "editItemSubmit") public String editItemSubmit(int id, Items item) {

js獲取後臺Spring MVC資料

後臺Controller: @HtmlTitle(title = "Statistic") @RequestMapping("/statistic") public String statistic(Model model){ List&l

spring mvc中 shiro logout 配置方式

預設情況是跳轉到網站首頁,但現在需要後臺登陸登出後,跳轉到後臺登陸介面修改如下:1、在applicationContext-shiro.xml中增加LogoutFilter並配置登出跳轉url,可參考如下程式碼:<bean id="logoutFilter" cl

spring mvc 資料繫結問題 提交表單提示HTTP status 400, The request sent by the client was syntactically incorrect

我們在spring mvc 中controller方法中的引數,spring mvc會自動為我們進行資料繫結。 spring mvc 方法中不一定要全部都有 form表單提交的屬性, 也可以有 請求屬性中 沒有的引數(這時候只會把對應不上的引數設為null),

Spring mvc通過xml配置檔案方式實現簡單HelloWorld

實現Spring MVC有兩種不同的方式:基於XML配置檔案和基於註解。 這裡,我們使用XML檔案的方式來實現。 首先,我們需要在Eclipse或者是MyEclipse中新建一個web專案,並將Spr