導入
Spring MVCを使用した注釈確認は、ビューモデルの簡単なデータを直接検証できます。これは簡単です。モデルのデータ検証にもっと複雑なビジネスロジックが必要な場合、検証のために注釈を使用することは困難です。
以下は、Spring MVCを使用した注釈検証に加えて、Custom @Telの注釈確認の例です。
1。多言語(国際化)をサポートする
2。最初にデフォルトのデータを変換します。たとえば、INTおよび日付タイプが空の値で渡される場合、例外がスローされます。指定されたデフォルトの値が与えられます。
最初に構成を見てみましょう:
1。web.xml
<?xml version = "1.0" encoding = "utf-8"?> <web-appバージョン= "3.0" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instcance" xsi:schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/ns/javaee/ 1 </display-name> <context-param> <param-name> contextconfiglocation </param-name> <param-value> classpath:spring.xml </param-value> </context-param> <servlet> <servlet-name>派遣<init-param> <param-name> contextconfiglocation </param-name> <param-value> </param-value> </init-param> <load-on-startup> 1 </load-on-startup> </servlet> <servlet> <servet-name> dispatcher </servlet-name> <url-perthers> </ur-pertern> </ur-pertern> </ur-pertern> <リスナークラス> org.springframework.web.context.contextloaderlistener </ristener-class> </ristener> <welcome-filelist> <welcome-file> index.jsp </welcome-file> </welcome-file-list> </web-app>
ここには何も言うことはありません、spring.xml構成をContextConfiglocationに追加するだけです
2。Spring.xml
<?xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns:xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns:tx = "http://www.springframework.org/schema/tx" xmlns:context = "http://www.springframework.org/schema/context" XMLNS:MVC = "http://www.springframework.org/schema/mvc" xsi:schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework/ http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/schema http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd "> <! - annotation説明 - > <コンテキスト:annotation-config/> <! - デフォルトのアノテーションマッピングサポート - @Controller Annotation to Bean-> <Context:Component-Scansaber-Package = "com.my"/> <! - viee rettrenation class-> <bean> <property name = "precix" value = "/web-inf/views/"/> <プロパティname = "suffix" value = "。JSP"/> <! name = "ViewClass" value = "org.springframework.web.servlet.view.jstlview"/> </bean> <! - リソースファイル:messages.properties-> <bean id = "messagesource"> <プロパティ名= "basenames"> <list> <value> </value> </propert> id = "balidator"> <プロパティ名= "validationmessageSource" ref = "sassageSource"/> </bean> <! - カスタムデータ型コンバーター - > <bean id = "conventionservice"> <プロパティ名= "converter"> <list> <bean/> <bean/> </list> </bean> </beans> </beans> </beans> </beans
コンバージョンサービスを<MVC:Annotation-driven/>に追加し、システムのデフォルトコンバーターをコンバージョンサービスに追加します。たとえば、上にはintconverterとdateConverterがあります。もちろん、カスタマイズしたり、グローバルである他のタイプをカスタマイズすることもできます。
多言語プロパティがVALIDATOR BALIBATORに追加されます。もちろん、Springの多言語はHTTPヘッダーの受け入れ言語に基づいています。
3。コントローラー
パッケージcom.my.controller; import java.util.list; import javax.validation.valid; import org.springframework.stereotype.controller; import org.springframework.validation.bindingResult; import org.springframework.validation.fielderoror; Import; org.springframework.bind.annotation.modelattribute; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmethod; Import org.springframework.web.web.web.serveletelet.modelwork com.my.controller.bean.user4;@controller@requestmapping(value = "av")public class testannotationValidController {@RequestMapping public ModelandView index(){ModelandView View = new ModelAndView( "/testannotationValid/Index"、 "user4"、new user4());戻りビュー。 } @requestMapping(value = "/add"、method = requestmethod.post)public modelandview add(@modelattribute @valid user4 user、bindingResult result){modelandview view = new ModelandView( "/testAnnotationValid/index"); view.addobject( "user4"、user); if(result.haserrors()){list <fielderror> errors = result.getFielderrors(); for(fielderror err:errors){system.out.println( "objectname:" + err.getobjectname() + "/tfieldname:" + err.getfield() + "/tfieldvalue:" + err.getRejectedValue() + "/tmessage:" + err.getDefaultMessage; "/tcode:"); }} return View; }}これは単純なコントローラーです。追加すると、@validの注釈があります。これは必要です。これを追加せずに、注釈の確認は機能しません
4。user4.javaモデルエンティティクラス
パッケージcom.my.controller.bean; Import java.util.date; import javax.validation.constraints.max; import javax.validation.constraints.min; import javax.validation.constraint.notnull; Import javax.validation.constraints.past; Import javax.validation.constridmation.Constridmation.Constridmation javax.validation.constraints.size; Import org.hibernate.validator.constraints.email; Import org.hibernate.validator.constraints.length; import org.hibernate.validator.constraints.notblank; public class user4 {private long id; @notblank(message = "{valid.name}")private string name; @length(min = 4、max = 20、message = "{valid.password}")private string password; @notblank(message = "{valid.required}")@email(message = "{valid.email}")private string email; @notnull(message = "{valid.Required}")既婚のプライベートブール。 @min(value = 18、message = "{valid.agemin}")@max(value = 100、message = "{valid.agemax}")private int age; @notnull(message = "{valid.required}")@past(message = "{valid.birthday}")private Date Birthday; @pattern(regexp = "^[a-za-z] {2、} $"、message = "{valid.address}")private stringアドレス; @size(min = 1、message = "{valid.likesmin}")private string [] witt; @com.my.controller.validator.tel(message = "{valid.tel}"、min = 3)private string tel; 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 string getemail(){return email; } public void setemail(string email){this.email = email; } public boolean ismarried(){return marrime; } public void setmarried(boolean married){this.married = marride; } public int getage(){return age; } public void Setage(int age){this.age = age; } public date getBirthday(){return Birthday; } public void setbirthday(date Birthday){this.birthday = Birthday; } public string getAddress(){return Address; } public void setAddress(stringアドレス){this.address = address; } public string [] getlikes(){return wint; } public void setlikes(string [] like){this.likes = witt; } public string gettel(){return tel; } public void settel(string tel){this.tel = tel; }}@Telとは別に、他のものはすべて春に付属する注釈です。もちろん、他にもあります。自分でそれを検索してください。
5。message.properties
valid.required =フィールド値は空にすることはできませんvalid.name =ユーザー名は空にすることはできませんvalid.password =最小パスワードはvalid.agemin = {1} age all.agemax = agemax =年齢を超えることはできません有効です。優先順位は1未満ではありませんvalid.tel =携帯電話番号は{min}未満にすることはできませんuser4モデルの注釈の対応するメッセージ値。国際的な多言語が必要な場合は、messages_en_us.propertiesという名前の追加ファイルを追加するだけです。
6。@Tel
パッケージcom.my.controller.validator; import java.lang.annotation.elementtype; Import java.lang.annotation.Retention; Import java.lang.annotation.retentionPolicy; Import java.lang.annotation.targett; import javax.validation.constraint; import; javax.validation.payload; @target({elementType.field、elementType.method})@retention(retentionPolicy.runtime)@constraint(validatedby = telvalidator.class)public @interface tel {int min()default 0;文字列メッセージ(); class <?> [] groups()default {};クラス<?ペイロードを拡張> []ペイロード()デフォルト{};}新しいインターフェイスを作成します。アノテーションインターフェイスJavaは次のように書かれていることに注意してください:@interface
Telvalidator:
パッケージcom.my.controller.validator; import javax.annotation.resource; Import javax.validation.constraintvalidator; import javax.validation.constraintvalidatorContext; impont org.springframework.context.support.resourcebundledatorce; public class class telavalidator <straintator <straintatorプライベートリソースBundleMessageSource Messagesource;プライベートテルテル; @Override public void initialize(tel tel){this.tel = tel; } @Override public boolean isvalid(string value、constraintValidatorContext ConstraintContext){boolean isvalid; if(value!= null && value.length()> = tel.min()){isvalid = true; } else {isvalid = false; } if(!isValid){constraintContext.disabledEfaultConstraintViolation(); constraintContext.buildconstraintviolationwithtemplate(tel.message())。addconstraintviolation(); } isvalidを返します。 }}これは、 @Telの検証実装方法です。
7。コンバーター
パッケージcom.my.controller.converter; Import org.springframework.core.corte.converter.converter; public class intconverter emblentice converter <string、integer> {@override public integer convert(string text){if(text == null || "。 } else {try {integer value = integer.parseint(text);返品値。 } catch(例外e){return 0; }}}}パッケージcom.my.controller.converter; import java.text.parseexception; Import java.text.simpledateformat; Import java.util.date; Import org.springframework.core.convert.converter.converter; public class dateconverter connverter <simplided> beterrided>> vishrideRided> dateformat = new SimpledAteFormat( "yyyy-mm-dd"); dateformat.setlenient(false); try {return dateformat.parse(text); } catch(parseexception e){e.printstacktrace(); } nullを返します。 }}これら2つは、グローバルタイプのデフォルトコンバーターです。
8。JSPをテストします
<%@ 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 = "sf" 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 "> <title> index </</head> <body> <sf:form action = "$ {pagecontext.request.contextpath}/av/ad" method = "modelattribute =" user4 "> user name:<sf:input path =" name "/> <sf:errors path =" name "/> <br/>パスワード:<sf:入力パス="パスワード "/> path = "email"/> <sf:errors path = "email"/> <br/> age:<sf:input path = "age"/> <sf:errors path = "age"/> <br/>誕生日:<sf:入力パス= "誕生日"/> <sf:sf path = "誕生日"/> <br/既婚:<sf:radiobutton path = "married" label = "yes" value = "true"/> <sf:errors path = "married"/> <br/>いいね:<sf:<sf = "label =" football "value =" football "/> <sf:sf:sf:checkbod path =" label = "badminton" "badminton" "badminton" "" badminton "" "badminton" "badminton" "badminton" "badminton" value = "pingpong"/> <sf:エラーパス= "lik"/> <br/> tel:<sf:input path = "tel"/> <sf:errors path = "tel"/> <br/> <入力タイプ= "submit" value = "add"/> <hr/>エラー:<br/> <sf = "*"> </sf:< items = "$ {user4.likes}" var = "item"> $ {item}、</c:foreach> </sf:form> </body> </html>フォームのModelAttribute属性値は、Loshcaseから始まるUser4クラス名に対応することに注意してください。そうしないと、エラーが発生します。
9。ページUIの結果:
[追加]ボタンをクリックした後:
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。