私のアクションクラスが以下のとおりである場合:
<!-- language: lang-java -->
package org.tutorial.struts2.action;
import java.util.Map;
import org.apache.struts2.interceptor.RequestAware;
import org.tutorial.struts2.service.TutorialFinder;
import com.opensymphony.xwork2.Action;
public class TutorialAction implements Action, RequestAware {
private String language;
private String bestTutorialSite;
public String execute() {
System.out.println(language);
setBestTutorialSite(new TutorialFinder().getBestTutorialSite(language));
System.out.println(bestTutorialSite);
if (getBestTutorialSite().contains("Java"))
return SUCCESS;
else
return ERROR;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
public String getBestTutorialSite() {
return bestTutorialSite;
}
public void setBestTutorialSite(String bestTutorialSite) {
this.bestTutorialSite = bestTutorialSite;
}
@Override
public void setRequest(Map<String, Object> requestObj) {
System.out.println(bestTutorialSite);
requestObj.put("message", bestTutorialSite);
}
}
このアクションが execute メソッドの前に呼び出されると、言語は Struts2 フレームワークによって既に取り込まれています。execute メソッドでは、setBestTutorialSite
メソッドはプライベート フィールドにデータを入力することbestTutorialSite
です。
ここで、このプライベート フィールドbestTutorialSite
をリクエスト属性 (setRequest
メソッド内) に設定することを考えました。ただし、プライベート フィールド (言語など) が入力される前に、このメソッドが最初に呼び出されることに気付きました。したがって、このsetRequest
メソッドでは、システム出力bestTutorialSite
は常に null です。
bestTutorialSite
JSP ページを呼び出す前に、(execute メソッドからキャプチャされた) を使用してこの属性を設定できると思いました。
私は Struts2 フローの理解を完全に把握しているとは思いません - 明らかに! :OP
助けてください。ありがとう。