3

ユーザー インターフェイスからのデータのプロパティにセッターとゲッターを持たないアクション クラスを作成したいと考えています。ServletActionContext.getRequest().getParameterMap()代わりに、独自のビルダー クラスで使用してオブジェクトを構築したいと考えています。

Actionプロパティのないクラスを作成しました。フォームを送信しているとき、私は遭遇していますognl.OgnlException: target is null for setProperty(null, "field-name", [Ljava.lang.String;@5513fab7)

プロパティを設定せず、上記の例外を回避するためにStruts2フレームワークを伝達するために必要な追加の規則または構成はありますか?

4

2 に答える 2

2

paramsパラメーターをインターセプターに設定することにより、インターセプターの受け入れパラメーターから一部のプロパティを除外できますexcludeParams。デフォルトでは、このパラメータは

<interceptor-ref name="params">
  <param name="excludeParams">dojo\..*,^struts\..*,^session\..*,^request\..*,^application\..*,^servlet(Request|Response)\..*,parameters\...*</param>
</interceptor-ref>

ここにプロパティを追加する必要があります。プロパティ名に一致する正規表現パターンを受け入れます。受け入れられたパラメーター名で適用される戦略は、ParameterNameAware上記の制限を削除できる実装されたアクションを介して危険にさらされる可能性があります。

「ユーザーインターフェイスからのデータ」についてより具体的に言うと、interceptor-ref要素へのパラメーターは起動時にインターセプターに適用され、構成マネージャーの他の場所に保存されないことに固執します。これは、実行時にこのパラメーターを取得できず、構成ファイルを更新して再読み込みすることによってのみ変更できることを意味しますstruts.xml。構成を安全な場所に保管し、変更できないように保護されている場合は、実行中のアプリケーションの安全性に対してより多くの主張をすることができます.

于 2013-05-17T08:19:59.687 に答える
2

はい、この特定のアクションのStruts params インターセプターマッピングを削除する必要があります。この関連する質問と同様のアプローチを取ることができると思います。それ以外の場合は、必要なインターセプターを使用して別のインターセプター スタックを作成し、パラメーター インターセプターを除いて、アクションを struts.xml でそのスタックにマップするか、アクション クラスで@InterceptorRefアノテーションを使用する必要があります (コンベンション プラグインを使用している場合)。

于 2013-05-16T23:23:39.417 に答える