複数のリクエスト間でモデル(フォームデータ)を共有したいので、アクションクラスにScopedModelDriven Interceptorを実装しました。
以下は私のコードです
モデル - EventSearchBean.java
public class EventSearchBean {
private Integer eventId;
private String location;
//getters and setters
}
アクション - EventSearchAction
public class EventSearchAction implements ScopedModelDriven<EventSearchBean>
{
private EventSearchBean eventSearchBean;
public static final String EVENT_MODEL_SESSION_KEY = "eventSearchBean";
public EventSearchBean getModel() {
return eventSearchBean;
}
public String getScopeKey() {
return EVENT_MODEL_SESSION_KEY;
}
public void setModel(EventSearchBean eventSearchBean) {
this.eventSearchBean = eventSearchBean;
}
public void setScopeKey(String arg0) {
// TODO Auto-generated method stub
}
public String execute();
{
String locale = eventSearchBean.getLocation();
//Calling business service to fetch events based on location
List<> eventList = eventManager.getEvents(locale);
return "success";
}
}
struts.xml
<!-- old stack used for other action classes -->
<interceptor-stack name="oldStack">
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="modelDriven"/>
<interceptor-ref name="exception"/>
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="params"/>
</interceptor-stack>
<!-- new stack used for EventSearchAction class -->
<interceptor-stack name="newStack">
<interceptor-ref name="servletConfig"/>
<interceptor-ref name="scopedModelDriven"/>
<interceptor-ref name="exception"/>
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="params"/>
</interceptor-stack>
<action name="eventSearch" class="com.karthik.EventSearchAction">
<interceptor-ref name="newStack">
<param name="scope">session</param>
<param name="name">eventSearchBean</param>
<param name="className">com.karthik.beans.EventSearchBean</param>
</interceptor-ref>
<result name="success">/jsp/eventlist.jsp</result>
<result name="error">/jsp/generalExceptionPage.jsp</result>
</action>
1)リクエストごとに新しいモデルが作成されます(モデルデータは、後続のリクエストのためにセッションからコピーされません)。モデルをセッション スコープに入れるには、コードで何を変更する必要がありますか?
モデルをStruts1のセッションスコープのActionFormのように動作させるには?
2) モデルの宣言中にアクション クラスの new 演算子を削除すると、それは
private EventSearchBean eventSearchBean;
アクション クラスでモデルにアクセスすると、Null Pointer 例外が発生します。
モデルを宣言/初期化する方法は?
3)フォームが UI で送信された場合にのみ、セッションでモデルをオーバーライド/更新する方法は?