如果我的动作类如下:
<!-- 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);
}
}
在执行方法之前调用此操作时,该语言已由 Struts2 框架填充。在执行方法中,setBestTutorialSite
方法是填充私有字段bestTutorialSite
。
现在我想到了将这个私有字段设置bestTutorialSite
为请求属性(在setRequest
方法中)。但是我注意到在填充任何私有字段(如语言)之前首先调用此方法。因此在该setRequest
方法中,系统打印bestTutorialSite
始终为空。
我以为我可以bestTutorialSite
在调用 JSP 页面之前使用(从执行方法中捕获)设置此属性。
我不认为我完全掌握了对 Struts2 流程的理解——显然!:OP
请帮忙。谢谢。