序文
Struts2でコンバーターを入力する理由
:Struts2は、Javaの8つの元のタイプと、文字列や日付などの一般的なタイプの自動変換のみを提供できます。
しかし、ページデータをJavabeanに統合したい場合、これは間違いなく私たちのニーズを満たすことができません。アクションに進むと、アクションが得られるのはオブジェクトであるため、この要件では型コンバーターを使用する必要があります。
ほとんどの場合、struts2フレームワークによって提供される組み込み型コンバーターとOGNLベースのタイプコンバーターを使用すると、ほとんどのタイプの変換ニーズを満たすことができます。ただし、指定された形式の文字列を複合オブジェクトに変換する必要があり、カスタムタイプのコンバーターが必要な特別なケースがいくつかあります。たとえば、クライアントがサーバーに「Jelly | 123456」などの文字列を送信する場合、この文字列をユーザータイプインスタンスに変換し、ユーザー名として「Jelly」、ユーザーパスワードとして「123456」を変換する必要があります。
カスタムタイプ変換クラス
このようなフロントデスクのページがあります:
<form action = "login" method = "post"> user:<input type = "text" name = "userinfo"> <br> <入力タイプ= "balue =" convert "> </form>
対応するアクションコードは次のとおりです。
プライベートユーザーユーザー; //これは化合物タイプのプライベート文字列のチップです; public void setusers(user user){this.user = user;} public user getuser(){return user;}ユーザーがフォアグラウンドページに「username | password」という形式で文字列を入力し、文字列を「ユーザー名|パスワード」の形式でカスタムタイプのコンバーターを介してユーザータイプに変換することを願っています。カスタムタイプコンバーターの実装方法について説明しましょう。
Struts2のタイプコンバーターは、実際にはまだOGNLフレームワークに基づいています。 OGNLプロジェクトにはTypeConverterインターフェイスがあります。これは、カスタムタイプコンバーターによって実装する必要があるインターフェイスです。このインターフェイスの定義コードは次のとおりです。
// ognlはパブリックインターフェイスTypeconverterを提供します{public Object convertValue(マップコンテキスト、オブジェクトターゲット、メンバーメンバー、文字列プロパティナム、オブジェクト値、クラスTotype);}タイプコンバーターを実装するには、上記のTypeConverterを実装する必要がありますが、上記のインターフェイスのメソッドは複雑すぎるため、OGNLプロジェクトはこのインターフェイスの実装クラスも提供します:DefaultTypeConverterは通常、このクラスを使用してカスタムタイプのコンバーターを実装します。カスタムタイプコンバーターを実装するには、defaultTypeConverterクラスのConvertValueメソッドをオーバーライドする必要があります。
以下は、ユーザークラスインスタンスに変換された変換クラスです。
パブリッククラスのuserconverter extends defaulttypeconverter {public object convertvalue(マップコンテキスト、オブジェクト値、クラスtotype){if(totype == user.class){//文字列をユーザータイプに変換する必要がある場合//システムのリクエストパラメーターは文字列アレイ文字列[] largs =(文字列[])値; //ユーザーインスタンスユーザーユーザー= new user(); //要求パラメーター配列の最初の配列要素を処理し、文字列を「|」で2つの文字列に分割しますシンボル文字列[] uservalues = params [0] .split( "// |"); //ユーザーインスタンスに値を割り当てますuser.setname(uservalues [0]); user.setPassWord(uservalues [1]);ユーザーを返します。 } else if(totype == string.class){//ユーザータイプを文字列ユーザー=(ユーザー)値に変換する必要がある場合; return "<" + user.getName() + "|" + user.getPassWord() + ">"; } nullを返します。 }}ConvertValueメソッドの機能は非常に簡単です。この方法は、タイプ変換の完了を担当しますが、この変換は双方向です。ターゲットタイプは、パラメーターTOTYPEに基づいて審査され、2つの方向に変換ロジックを実装できます。
タイプコンバーターを登録します
Struts2フレームワークではこれらのタイプコンバーターを使用するタイミングがわからないため、タイプコンバーターをWebアプリケーションに登録する必要があるため、STRUTS2フレームワークはこのタイプコンバーターを正常に使用できるため、タイプコンバーターを持つだけでは十分ではありません。
Struts2は、主にタイプコンバーターを登録する次の2つの方法をサポートしています。
タイプコンバーターを登録する上記の2つの方法について話しましょう。
ローカル型コンバーター
Struts2を使用すると、開発者はローカルタイプの変換ファイルを介してタイプ変換の構成情報を指定できます。タイプ変換ファイルは、通常のプロパティ(*.Properties)ファイルです。ローカルタイプ変換ファイルのファイル名は、actionname conversion.propertiesの形式である必要があります。ここで、アクション名はこのタイプでファイルに変換する必要があるアクション名であり、後続の-Conversion.Properties文字列は固定部です。タイプ変換ファイルは、アクションクラスファイルと同じ場所に配置する必要があります。
ローカルタイプの変換ファイルについて話した後、登録されたローカルタイプのコンバーターについてさらに説明します。ローカルタイプのコンバーターを登録するには、次の構成ラインをローカルタイプコンバーターファイルに追加するだけでいいです。
<PropName> = <ConverterClass>
上記の<Propname>をタイプコンバージョンする必要があるプロパティに置き換え、<converterclass>をタイプコンバーターの実装クラスに置き換えます。上記で実装したUserConverterクラスの場合、次のようにローカルタイプの変換ファイルで構成する必要があります。
#ユーザー属性を指定するには、userconverterクラスを使用してタイプ変換ユーザー= com.jellythink.practise.userconverterを完了する必要があります
グローバルタイプコンバーター
ローカルタイプのコンバーターの制限はあまりにも明白であり、指定されたアクションと指定されたプロパティでのみ作業することができます。ただし、アプリケーション内の複数のアクションにユーザータイプの属性が含まれている場合、または1つのアクションに複数のユーザータイプの属性が含まれている場合、グローバル型コンバーターを使用する方が適切です。
グローバルタイプコンバーターは、指定されたアクションの指定されたプロパティではなく、指定されたタイプで機能します。たとえば、タイプcom.jellythink.practise.userのすべてのプロパティで動作します。
グローバルタイプコンバーターの登録は、Xwork-conversion.propertiesファイルを提供する必要があります。これはグローバル型コンバーターファイルです。 WebアプリケーションのWeb-INF/クラスパスの下にファイルを直接配置する必要があります。
グローバルタイプ変換ファイルコンテンツは、複数の<Proptype> = <ConvertClass>アイテムで構成されています。 PropTypeをタイプ変換する必要があるタイプに置き換え、ConvertClassをタイプコンバーターの実装クラスに置き換えます。上記で実装されたUserConverterクラスの場合、次のようにグローバルタイプ変換ファイルで構成する必要があります。
com.jellythink.practise.user = com.jellythink.practise.userconverter
「ローカル」対「グローバル」
ローカル型変換は、指定されたアクションの指定属性のみを変換できます。アクションの属性が配列かコレクションタイプかに関係なく、コンバーターの変換方法は属性を1回だけ変換します。アクションにリスト<user>プロパティユーザーがある場合、ローカルタイプのコンバーターはconvertvalue()メソッドを一度だけ呼び出します。
グローバルタイプコンバーターは、すべてのアクション固有のタイプを変換します。アクションの属性が配列またはコレクションタイプであり、配列またはコレクション要素がコンバーターを変換する必要がある方法である場合、グローバル型コンバーターはSET属性全体を変換せず、SET属性の各要素を変換します。つまり、属性が配列またはコレクションである場合、配列またはコレクションにはタイプのいくつかの要素が含まれている場合、ConvertValue()メソッドは数回呼び出されます。
2つの違いに精通した後、私は将来の仕事でそれにもっと注意を払います。特に、それらを変換するときのアレイと設定要素の違い。
struts2に基づくカスタムタイプコンバーター
上記は、defaultTypeConverterクラスを継承することにより変換方向を導入します。変換方向は、TOTYPEパラメーターを審査することで変換方向が判断され、次に異なる変換方向の変換ロジックが個別に実装されます。 struts2フレームワークでは、タイプコンバーターの実装を簡素化するために、defaulttypeconverterクラスのサブクラスであるstrutstypeconverter抽象クラスが特別に提供されます。 DefaultTypeConverterクラスのConvertValueメソッドを実装しました。このメソッドを実装すると、ConvertValueメソッドのTOTYPEパラメーターを次の2つの異なるメソッドを呼び出すことにより、2つの異なる方向に変換を変換します。
私たちがする必要があるのは、StrutStypeConverterの抽象クラスを継承し、2つの抽象的な方法を実装することです。
変更されたコードは次のとおりです。
パブリッククラスのuserconverter strutstypeconverter {public object convertfromstring(map context、string [] values、class toclass){user user = new user(); string [] uservalues = values [0] .split( "// |"); user.setname(uservalues [0]); user.setPassWord(uservalues [1]);ユーザーを返します。 } public String convertToString(Map Context、Object O){//ユーザータイプを文字列ユーザーに変換する必要がある場合ユーザー=(ユーザー)o; return "<" + user.getName() + "|" + user.getPassWord() + ">"; }}要約します
この記事では、Struts2のカスタムタイプコンバーターを詳細に要約しており、全体的なアイデアは次のとおりです。
カスタムタイプのコンバーターを完成させるためのほんのいくつかのステップ。
さて、上記はこの記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。