検証にinitbinderを使用する場合、このコントローラーで提出されたデータの一部は、ビジネスの性質のものである必要があります。つまり、比較的複雑な検証状況でのみ使用されます。最も単純な形式の検証は、注釈の検証を使用して解決できます。
注釈確認の使用については、http://www.vevb.com/article/136448.htmを参照してください。
ここで注意すべきことの1つ:initbinderと注釈は、2つの検証のいずれかを選択できます。 initbinderを使用すると、注釈の検証は使用できません。
Web.xmlとspring.xmlの以前の構成は繰り返されません。上記のリンクの構成を参照してください。まったく同じです。
コードを直接アップロードします。
1。USER5モデルエンティティクラス
パッケージcom.my.controller.bean; Import java.util.date; public class user5 {private long id;プライベート文字列名;プライベート文字列パスワード。プライベートデートCreateTime;プライベートインクエイジ; public long getId(){return id; } public void setid(long id){this.id = id; } public string getname(){return name; } public void setName(string name){this.name = name; } public string getPassWord(){パスワードを返します。 } public void setPassword(string password){this.password = password; } public date getCreatetime(){return createTime; } public void setCreatetime(date createTime){this.createtime = createTime; } public int getage(){return age; } public void Setage(int age){this.age = age; }}2。新しいバリデーターを追加します:
パッケージcom.my.controller.validator; import org.springframework.stereotype.component; Import org.springframework.validation.errors; Import org.springframework.validation.validation.tils; Import org.springframework.validation.validator; com.my.my.my.controller.bunpentrer.bunpentrer.bunpentr.bunpentator testValidatorはvalidatorを実装します{@Override public boolean supports(class <?> paramclass){return user5.class.equals(paramclass); } @Override public void validate(Object obj、エラーエラー){user5 user =(user5)obj; validationutils.rejectifemptyorwhitespace(errors、 "name"、 "valid.name"、null、 ""); if(user.getage()<18){errors.rejectvalue( "age"、 "balid.agemin"、new object [] {"age"、18}、 "年齢は{1} onty old"); }}}@Componentをここに追加する必要があり、DIが注入されます
3。コントローラー
パッケージcom.my.controller; import java.util.linkedhashmap; Import java.util.list; import java.util.map; import javax.validation.valid; import org.springframework.beans.factory.annotation.autowired; importframework.springframework.spramework.springwork.springwork.springframework.springframework org.springframework.stereotype.controller; Import org.springframework.validation.bindingResult; import org.springframework.validation.fielderror; import org.springframework.validation.Validator; Import org.springframework.web.bind.webdatabinder; org.springframework.web.bind.annotation.initbinder; Import org.springframework.web.bind.annotation.modelattribute; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.notation.Requestmeth org.springframework.web.servlet.modelandview; Import com.my.my.controller.bean.user5; @controller @requestmapping(value = "binder")public class testinitbindercontroller {@autowired @qualifier(value = "testValidator")private validator; @initbinder private void initbinder(webdatabinder binder){binder.setvalidator(validator); } @RequestMapping(method = requestmethod.get)public string index(){return "/testinitbinder/index"; } @RequestMapping(value = "add"、method = requestmethod.post)public modelandview add(@modelattribute @valid user5 user、bindingResult result){modelandview view = new ModelandView( "testinitbinder/index"); view.addobject( "user"、user); if(result.haserrors()){list <fielderror> errs = result.getFielderrors(); map <string、string> maperrors = new linkedhashmap <string、string>(); for(fielderror err:errs){system.out.println( "objectname:" + err.getobjectname() + "/tfieldname:" + err.getfield() + "/tfieldValue:" + err.getRejectedValue() + "/tmessage:" + err.efaultMessage; maperrors.put(err.getfield()、err.getDefaultMessage()); view.addobject( "errors"、maperrors); } return View; } return View; }}バリデーターをコントローラーに注入します。
実際、initbinderを使用すると、ADDコントローラーのerr.getDefaultMessage()メソッドは、対応する正しいメッセージを取得できません。最終的な入力印刷の結果を見ることができます。
4。表示
<%@ page Language = "Java" contentType = "text/html; charset = utf-8" pageEncoding = "utf-8"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/core" fentix = "" "%> <%@ taglibib uri = "http://java.sun.com/jsp/jstl/fmt" prefix = "fmt"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/functions" prefix = "" fn "%> < uri = "http://www.springframework.org/tags"%> <%@ taglib prefix = "form" uri = "http://www.springframework.org/tags/form"%> <!doctype html public "// w3c/dtd html 4.01/" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <tittle> init binder </title> <body> <body> <body> <body> <body> method="post" modelAttribute="user5"> User name:<input type="text" id="name" name="name" value="${user.name}" /><br/> Password:<input type="text" id="password" name="password" value="${user.password}" /><br/> Age:<input type="text" id="age" name="age" value = "$ {user.age}"/> <br/> <入力タイプ= "submit" value = "add"/> <hr/>エラー:<br/> <form:errors path = "*"> </form:errors> </form:form> </body> </html><form:errors/>を使用してエラー情報を取得できることに注意してください。
5。結果テスト
[追加]ボタンをクリックします:
印刷する:
ここでエラーの正しい情報を取得できないことがわかります
実際、非常に複雑なフォームページで送信されたデータに特定のビジネスロジックがある場合、Initbinderはそれほど使用してはなりません。多くの場合、マップを使用してエラーを挿入してページで読み取ることができます。例えば:
map <string、string> errors;
errors.add( "name"、 "ユーザー名は空になりません!");
:
:
使用するだけです:
<span style = "color:red;"> $ {errors.name} <Span>やるだけ。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。