1。序文
1.1。入力検証とは何ですか?なぜ確認を入力する必要があるのですか?
前の記事では、データ型変換について学びました。プレゼンテーションレイヤーデータ処理の2つの方法について言及しました。また、ユーザー入力データは、必要なデータを取得するためにタイプ変換である必要があると述べました。それでは、タイプ変換後のデータが必要なデータであるとどのように判断しますか?ここでは少しトラバースです。このように考えることができます。成人男性は18歳で、18のデータを取得したいのですが、ユーザーは32を入力し、タイプから変換することも正しいですが、データは必要なものではありません。現時点で私たちは何をすべきですか?したがって、入力検証はここで役立ちます。
タイプ変換と入力検証の関係は次のとおりです。タイプ変換は、入力検証の前提条件です。両方のタイプ変換が間違っている場合、入力検証を実行する必要はありません。しかし、多くの場合、タイプの変換と入力検証が同時に行われます。
入力検証には2つのタイプがあります。
1。クライアント検証。
2。サーバー側の検証。ここで主に説明しているのは、サーバー側の検証です(validatexxxメソッドとxml構成ファイル検証)を書き直します)
1.2。検証validatexxxメソッドの検証プロセス
1.タイプコンバーターは、文字列の要求パラメーターのタイプ変換に責任を負い、これらの値をアクションのプロパティ値に設定します。
2。型変換の実行中に例外が発生する場合があります。例外が発生した場合、例外情報はActionContextに自動的に保存されます。変換エラーインターセプターは、それをフィールダーラーにカプセル化する責任があります。
3。riffectionを介してvalidatexxx()メソッドを呼び出します。ここで、xxxはユーザー要求を処理する処理ロジックに対応するメソッド名です。
4.アクションクラスの検証方法を呼び出します
5.上記の手順にフィールダーラーが表示されない場合、アクションでユーザー要求を処理するための処理方法が呼び出されます。フィールダーラーが表示されると、システムは入力論理ビューで指定されたビューに転送されます。
2。入力検証
2.1。ここに検証を入力するには2つの方法があります。
1.検証メソッドを書き換えるか、ValidateXXXメソッドをカスタマイズします(XXXは定義する名前、メソッドが最初に実行され、検証メソッドが実行されます)
2。検証のために新しいXMLを作成します
2.2。検証メソッドを書き直します
MVCフレームワークでは、標準化されたデータ検証部分が提供されます。 Struts2はここで検証型メソッドを提供します。検証メソッドを書き換えて、入力検証を実行できます。ただし、検証メソッドの書き換えについて知っておくべき2つのポイントがあります。1。検証メソッドは実行前に実行されます。 2.検証メソッドは、すべてのアクションの検証ルールを実行します。特定のアクションを区別するために、ValidateXXXメソッドを使用できます。
注:次の例は、ローカルタイプの変換と入力検証の例です。
簡単な登録確認例:
新しいエンティティクラスユーザーを作成します。
ユーザー
新しいビューを作成する:Register.jsp
<%@ page Language = "Java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <%@ taglib uri = "/struts-tags" prefix = "s"%> <!doctype html public " - // "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <title>登録ユーザー</head < Action = "Register_test">ユーザー:<入力タイプ= "Text" name = "user"> <br/>パスワード:<入力タイプ= "パスワード" name = "user"> <br/>パスワード:<入力タイプ= "パスワード" name = "user"> <br/>
ActionSupportを継承する新しい登録クラスを作成します
パッケージcom.validatexxx; import com.opensymphony.xwork2.actionsupport; // balwrite validate()およびvalidatexxx検証の指定メソッド/ * * struts.xmlで、メソッドvalidatetest()メソッドが最初に呼び出され、次にテストメソッドが呼び出されます。 public user getUser(){return user; } public void setuser(user user){this.user = user; } // 2 @Override public void validate(){system.out.println( "rewrite validate method"); if(null == user.getPassWord()|| "" .equals(user.getPassword())|| null == user.getRepassWord()|| "" .equals(user.getRepassword())){this.addfielderror( "repassword"、 "repassword");戻る; } if(!user.getPassWord()。equals(user.getRepassWord())){// fielderrorにデータが存在する場合、サーバーは入力の論理ビューに自動的にジャンプします。 }} // 1 public void validatetest(){system.out.println( "カスタム検証方法:validatetest"); } // 3 public string test(){System.out.println( "test:method");成功を返す; }}注:ここのプロパティはユーザーであるため、JSPページパラメーターの名前をインスタンスユーザーの名前として記述する必要があります。また、データで満たされたクラスを返すためにタイプコンバーターを作成する必要があります。
新しいstruts.xmlを作成し、Web-inf/classs/struts.xmlに保存します
注:ここでの方法は、valudatexxx()メソッドの後に定義する必要があります。これがテストです。 *を使用する場合、structs2はstrict-method-invocation = "false"を設定する必要があります。バージョンが高すぎるため、そのセキュリティが増加し、すべてを使用するためにすべてを追加する必要があると言われています *
strutstypeconverterを継承する新しいusertypeconverterクラスを作成します(タイプコンバーターを作成)
パッケージcom.validatexxx;インポートjava.util.map; import org.apache.struts2.util.strutstypeconverter; //タイプ変換のクラスパブリッククラスUsertypeconverterはstrutstypeconverterを拡張します{@Override publicオブジェクトConvertFromstring(Map0、String [] arg1、Class1、Class1、Class1、Class1、Class1、クラスArg2) System.out.println( "usertypeconverter:type Conversion!"); user user = new user(); user.setUsername(arg1 [0]); user.setPassWord(arg1 [1]); user.setRepassWord(arg1 [2]);ユーザーを返します。 } @Override public String convertToString(Map Arg0、object arg1){user u =(user)arg1; return u.getUsername()+"!"; }}注:このタイプのコンバーターが作成された後、新しいRegisteraction-Conversion.Propertiesを作成し、同じディレクトリに配置する必要があります。
このファイルの内容は次のとおりです。
1つ目は、登録済みのプロパティ名で、その後にタイプコンバーターへの特定のパスが続きます。
新しい成功ビューを作成する:success.jsp
success.jsp
新しいエラービューを作成:input.jsp
input.jsp
コード実行の成功の効果は次のとおりです。
Register.jspページ
正常にジャンプしたページは次のとおりです
コンソールのテスト結果は次のとおりです。
データは、タイプ変換のためにusertypeconverterにジャンプし、登録にジャンプし、validatetestメソッド()を実行し、検証してから成功を返し、結果ビューを実行します。
コードが失敗する順序を見てみましょう。
Register.jspページ
input.jspページ
コンソールテスト効果:
検証メソッドでは、著者のコードは次のとおりです。前述のように、エラーが追加された場合、サーバーは自動的に間違ったインターフェイスにジャンプするのに役立ちます。入力を返し、入力はstruts.xmlで構成され、input.jspインターフェイスに戻ります。
2.3。入力検証のために新しいXMLを作成します
新しいビューインターフェイスを作成する:test.jsp
<%@ page Language = "Java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <%@ taglib uri = "/struts-tags" prefix = "s"%> <!doctype html public " - // "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <title> xml verification </head> </head> <body> <body> <s:textfield name = "name" label = "name" size = "20" /> <s:textfield name = "age" size = "20" /> <s:submit name = "submit" label = "submit" align = "center" /> < /s:form> < /body> < /html>
ActionSupportを継承する新しい従業員クラスを作成します
このクラスでは、オーバーライド検証メソッドとXML構成を使用します。検証のためにそのいずれかを選択できます
パッケージcom.validatexxx; import com.opensymphony.xwork2.actionsupport; // validate()メソッドを使用して検証すると、これはサーバー側の検証です!パブリッククラスの従業員はActionSupportを拡張します{private string name;プライベートインクエイジ; public string getName(){return name; } public void setName(string name){this.name = name; } public int getage(){return age; } public void Setage(int age){this.age = age; } // 2番目のステップはこのメソッドを実行しますpublic string execute(){system.out.println( "execute:"+this.age);成功を返す; }/*サーバー側を使用した検証:validate method(); //最初のステップはメソッドを実行することです// validateメソッドには欠陥があることを書き直すことです。検証メソッドを使用して検証するたびに、リソースの浪費を引き起こします。 public void validate(){system.out.println( "validate"); if(name == null || name.trim()。equals( "")){//このメソッドにデータを追加すると、サーバーは入力を返し、input.jspページにジャンプします。 addfielderroror( "name"、 "名前が必須"); } if(age <28 || age> 65){addfielderroror( "age"、 "年齢は28〜65"でなければなりません); }}*/}struts.xmlで構成:
success.jspとinput.jspはここでまだ上記を使用しています。
その後、新しい従業員Validation.xmlを作成し、従業員と同じディレクトリにパスを配置する必要があります。注:-validation.xmlは固定されていない。
内容は次のとおりです。
<?xml version = "1.0" encoding = "utf-8"?> <!doctype validators public " - // apache struts // xwork validator 1.0.3 // en" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd" <メッセージ>名前が必要です。 </message> </field-validator> </field> <field name = "age"> <field-validator type = "int"> <param name = "min"> 29 </param> <param name = "max"> 64 </param> <message>年齢は28から65 </message> </message-validator> </field> </validator>
キーポイント:このファイルのDTD制限はある必要があります。
エラーDefaultDispatcherErrorHandler例外は、処理リクエスト中に発生しました:[接続タイムアウト:connect- [不明な場所]、null]
次に、http:// localhost:8080/rearstruts2/validatejsp/test.jspを使用してアクセスします。
正常にテスト:
test.jspインターフェイス:
success.jsp
テスト障害の例:
input.jspインターフェイス:
図の例は正しいです。
実際、Struts2には複数の組み込みのバリデーターがあります:必要な検証装置、必要な文字列検証ター、整数検証ター、日付検証装置、式の検証装置、文字長さの検証ター、正規表現検証ターなどがあります。必要に応じて、著者はこれを1つずつ説明します。
上記は、編集者が紹介したStruts2データ入力検証チュートリアルの詳細な説明です。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!