基本的Action类,实现了ServletRequestAware,ServletResponseAware 接口,并重写了相对应的方法。
package cn.it.elec.web.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.ServletResponseAware;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class BaseAction extends ActionSupport implements ServletRequestAware,
ServletResponseAware {
@SuppressWarnings("unused")
private HttpServletRequest request = null;
@SuppressWarnings("unused")
private HttpServletResponse response = null;
@Override
public void setServletResponse(HttpServletResponse reponse) {
this.response = response;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
}
ElecCommonMsgAction 继承了 BaseAction 类,这样的话,就是可以直接使用request的。但是,直接写request会显示错误。
package cn.it.elec.web.action;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import cn.itcast.elec.container.ServiceProvider;
import cn.itcast.elec.service.IElecCommonMsgService;
import cn.itcast.elec.web.form.ElecCommonMsgForm;
import com.opensymphony.xwork2.ModelDriven;
@SuppressWarnings("serial")
public class ElecCommonMsgAction extends BaseAction implements ModelDriven<ElecCommonMsgForm> {
private ElecCommonMsgForm elecCommonMsgForm = new ElecCommonMsgForm();
private IElecCommonMsgService elecCommonMsgService = (IElecCommonMsgService) ServiceProvider.getService(IElecCommonMsgService.SERVICE_NAME);
@Override
public ElecCommonMsgForm getModel() {
return elecCommonMsgForm;
}
public String home(){
List<ElecCommonMsgForm> list = elecCommonMsgService.findElecCommonMsgList();
request.setAttribute("commonList", list);
return "home";
}
}
原来是:粗心大意惹的祸!在父类BaseAction中的request 是private 的,所以,它的子类仍然不能使用这个属性!把BaseAction中的request、response 的属性 改为protected即可。