今天寫了一個自定義攔截器.卻遇到了以下問題
package dgut.ke.interceptors;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
import dgut.ke.model.Catalog;
import dgut.ke.model.Publish;
import dgut.ke.model.Subject;
import dgut.ke.service.ICatalogService;
import dgut.ke.service.IPublishService;
import dgut.ke.service.ISubjectService;
public class AddBookInterceptor extends MethodFilterInterceptor {
/**
*
*/
private static final long serialVersionUID = 1135497226250835266L;
private ISubjectService subjectService ;
private ICatalogService catalogService ;
private IPublishService publishService ;
public ICatalogService getCatalogService() {
return catalogService;
}
public IPublishService getPublishService() {
return publishService;
}
public ISubjectService getSubjectService() {
return subjectService;
}
public void setCatalogService(ICatalogService catalogService) {
this.catalogService = catalogService;
}
public void setPublishService(IPublishService publishService) {
this.publishService = publishService;
}
public void setSubjectService(ISubjectService subjectService) {
this.subjectService = subjectService;
}
@Override
protected String doIntercept(ActionInvocation invoation) throws Exception {
// TODO 自動生成方法存根
System.out.println("-------- 攔截器開始執行 ----------");
List<Subject> subject_list = (ArrayList<Subject>)subjectService.findAll();
List<Catalog> catalog_list = (ArrayList<Catalog>)catalogService.findAll();
List<Publish> pubish_list = (ArrayList<Publish>)publishService.findAll();
//ActionContext act = ActionContext.getContext() ;
ActionContext act = invocation.getInvocationContext() ;
HttpServletRequest request = (HttpServletRequest) act.get(ServletActionContext.HTTP_REQUEST) ;
request.setAttribute("subject_list", subject_list) ;
request.setAttribute("catalog_list", catalog_list) ;
request.setAttribute("publish_list", pubish_list) ;
System.out.println("-------- 攔截器執行結束 ----------");
return Action.INPUT;
}
}
為了實現request.setAttribute(String str, Object obj) ;.最先是讓上面的類實現ServletRequestAware 接口.
但是在運行的時候卻出現了空指針異常。后來改成以上的代碼就可以正常運行,但是還是
不太明白
曾經在一本書上看到一段話:構建interceptor最重要的原則:interceptor必須是無狀態的,并且不能
夠使用任何ActionInvocation提供范圍以外的API
posted on 2007-10-06 21:54
Ke 閱讀(2472)
評論(0) 編輯 收藏 所屬分類:
exception 、
struts 2 、
問題區