3

ActionMappingParametersInteceptorStruts2 でのクラスの使用を理解しようとしています。

API を見ると、次のようになります。

このインターセプターは、このリクエストのアクション マッピングのすべてのパラメーターを値スタックに設定します。これは とまったく同じように動作し ます。ParametersInterceptorパラメータのみが メソッドActionMappingではなくから取得されます。ActionContext.getParameters()

ActionMappingから取得したものとは異なる要求パラメーターのセットがクラスに含まれる場合はありActionContext.getParameters()ますか?

defaultStackインターセプターのストラットは、最初に を呼び出しParametersInterceptor、次にを呼び出しているようですが、そうActionMappingParametersInteceptorする理由がわかりません。

4

1 に答える 1

2

実際、インターセプターactionMappingParamsを拡張するのは、paramsオーバーライドされる2つのメソッドを使用して、アクションマップからパラメーターを処理することです。パラメータを実際に使用する最初の方法。2つ目は、アクションコンテキストに追加のパラメーターを追加します。retrieveParametersaddParametersToContextActionMapping

このクラスでは、パラメーターが同じ場所からフェッチされたため、これはノーオペレーションです。サブクラスでは両方ともretrieveParameters()オーバーライド addParametersToContext()する必要があります。

「ノーオペレーション」とは、

このインターセプターに動作を追加する最良の方法は ParameterNameAware、アクションでインターフェースを利用することです。ただし、アクションに実装されていないグローバルルールを適用する場合は、このインターセプターを拡張して ParametersInterceptor.acceptableName(String)メソッドをオーバーライドできます。

ParameterNameAware:

このインターフェースは、受け入れ可能なパラメーターを宣言するアクションによって実装されます。と連携して動作し ParametersInterceptorます。たとえば、アクションは、クライアントが他の予期しない(そしておそらく危険な)パラメーターを設定するのを防ぐために、受け入れるパラメーターのホワイトリストまたは拒否するパラメーターのブラックリストを作成したい場合があります。

これは、アクションコンテキストに追加のパラメーターを追加できる唯一のケースです。

于 2013-03-10T18:06:17.457 に答える