2017-05-23 17 views
0

私はstruts.xmlにこのようなものを使用しました:struts 2がactionクラスのset()メソッドを2回呼び出すのはなぜですか?

action name="{product}/{product-name}/info" 
class="myclass" 
.. and so on... 

私はパラメータproductproduct-nameのgetterメソッドとsetterメソッドを追加しました。ロギングでは、両方のパラメータのsetメソッドが(各パラメータに対して)2回呼び出されていることがわかりました。どうしてこんなことに?

+0

パラメータを設定するたびにstacktraceを送信してください。 –

答えて

0

あなたのインターセプタスタックにおそらくparamsインターセプタが2回宣言されています。

それは完全に正しいかもしれません。 paramsPrepareParamsStack

struts-default.xmlで利用可能なスタックの一つであり、あなたがModel-Driven-CRUDを実装しているとき、それは非常に便利です: 最初paramsインターセプターは、モデルのIDを設定し、その後、prepareは、データベースからモデルを取得(または何でも) 、その後、paramsインターセプタは、ドキュメントから

(あなたがPOSTを読んでいると想像)モデルのすべての着信の属性を設定します。

これは、外部からロードするオブジェクト(DAOやデータベース、サービスレイヤなど)に直接パラメータを適用する場合に便利ですが、少なくともIDパラメータがロードされるまでそのオブジェクトをロードすることはできません。パラメータを2回ロードすることで、prepare()メソッドでオブジェクトを取得し、2番目のparamsインターセプタがオブジェクトの値を適用できるようにします。

関連する問題