0

Spring 3 + Struts2アプリケーションを開発しており、Springでのアクションを次のように構成します。

  <bean id="patientSearchAPIClass" class="com.axiohelix.nozoki.web.action.api.PatientSearch">     
       <property name="searchService" ref="searchService"/>        
    </bean> 

しかし、私のActionクラスでは、Requestパラメーターを格納するためのフィールドを保持しています。

public class PatientSearch extends ActionSupport {


        public String getPharumoId() {      
        return pharumoId;
        }

        public void setPharumoId(String pharumoId) {
        this.pharumoId = pharumoId;
         }

        public String getName() {
        return name;
        }
        public void setName(String name) {
        this.name = name;
        }

        private String name;
        private String pharumoId;
        ..


        public String execute(){        
        searchResults=searchService.searchPatients(pharumoId,                                                  name,
                                                   birthday,
                                                   pharmacyId,
                                                   clinic,
                                                   doctorName,
                                                   drugName,
                                                   supplyDate,                                                 
                                                   offset, 
                                                   pageSize);       

        return Action.SUCCESS;
    }

このアクションはJSON出力を返し、次のようなURLを使用してアクセスします。

http://localhost/app/searchAPI.action?name=UserName

次回、URLを使用してアクセスする場合:

http://localhost/app/searchAPI.action

フィールド「name」は、前の「UserName」値に設定されるまでです。

1.リクエストごとにこれらの値をリセットするにはどうすればよいですか?

2.アクションクラスはリクエストごとにインスタンス化されると思いましたが、そうではありませんか?

4

1 に答える 1

2

問題は、アクションクラスがSpringによって作成される方法にありました。デフォルトでは、Springはシングルトンインスタンスを作成し、Struts2の場合、このフレームワークがアクションの新しいインスタンスを作成して値スタックに配置するため、アクションクラスはモデルとしても機能します。

Springを使用してアクションクラスを作成するときは、スコープを次のようなプロトタイプとして定義してください。

<bean id="patientSearchAPIClass" 
 class="com.axiohelix.nozoki.web.action.api.PatientSearch" scope=prototype>

そのため、アクションの新しいインスタンスは、リクエストごとにSpringによって作成される必要があります。

于 2012-08-17T07:14:33.390 に答える