亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JSF和Struts框架的錯誤控制與封裝處理

2024-09-05 00:16:54
字體:
來源:轉載
供稿:網友

在struts中,通常采用的全局錯誤控制模式是構建一個baseAction,在其execute方法中完成前臺傳回方法的dispatch操作,并由 try……catch……捕獲程序錯誤,實現錯誤的控制和展示。一個典型的BaseAction例子如下:

代碼

public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
……
ActionForward forwardPage = null;
try {
String parameter = mapping.getParameter;
if (parameter == null) {
String message = messages.getMessage("dispatch.handler",mapping.getPath);
response.sendError(500, message);
return null;
}
String name = processReqCode(request.getParameter(parameter));
forwardPage = dispatchMethod(mapping, form, request, response, name);
} catch (BaseException ex) {
if (log.isDebugEnabled)
log.debug("發生錯誤:", ex);
forwardPage = processBaseException(request, mapping, ex);
} catch (Throwable ex) {
log.error("發生錯誤:", ex);
ActionMessages errors = new ActionMessages;
ByteArrayOutputStream ostr = new ByteArrayOutputStream;
ex.printStackTrace(new PrintStream(ostr));
errors.add("org.apache.struts.action.GLOBAL_MESSAGE", new ActionMessage
(ostr.toString));
saveErrors(request, errors);
forwardPage = mapping.findForward("syserror");
output.setStatus("fail");
output.setError(ex.getMessage);
}
……
}
由于JSF采用了managed bean,JSP頁面直接通過調用managed bean中的方法完成數據交互,不能像struts一樣通過捕獲dispatch操作過程拋出的異常來完成錯誤的處理(因為根本就沒有dispatch方法),似乎jsf根本就不支持全局的錯誤處理。

如果在managed bean中throw 一個exception(這里是AppException),觀察一下控制臺的日志,可以看到其實錯誤是從一個ActionListener的實現中拋出的(針對myfaces,這里是ActionListenerImpl),參考jsf的生命周期過程,方法出來了:

代碼

public class GlobalActionListener extends ActionListenerImpl {
public void processAction(ActionEvent event) throws AbortProcessingException {
FacesContext facesContext = FacesContext.getCurrentInstance;
Application application = facesContext.getApplication;
ActionSource actionSource = (ActionSource) event.getComponent;
MethodBinding methodBinding = actionSource.getAction;
String fromAction = null;String outcome = null;
if (methodBinding != null) {
fromAction = methodBinding.getExpressionString;
try {
outcome = (String) methodBinding.invoke(facesContext, null);
} catch (EvaluationException e) {
Throwable cause = e.getCause;
if (cause != null && cause instanceof AppException) {
//這里需要根據框架的不同,判斷實例是否是程序中手動拋出的錯誤
FacesUtils.addErrorMessage(event.getComponent.getClientId(facesContext),
cause.getMessage);}
else {
throw (AbortProcessingException) cause;
}
} catch (RuntimeException e) {
throw new FacesException("Error calling action method of component with id "
event.getComponent.getClientId(facesContext), e);
}
NavigationHandler navigationHandler = application.getNavigationHandler;
navigationHandler.handleNavigation(facesContext, fromAction, outcome);
// Render Response if needed
facesContext.renderResponse;
}
}
監聽器配置,faces-config-application.xml:

代碼



org.springframework.web.jsf.DelegatingVariableResolver

resources.application

en


org.snailportal.webframework.listener.GlobalActionListener


這樣,開發人員只需要在action和managed bean里面根據業務的需要拋出指定基礎類型的Exception實例,由BaseAction和ActionListener完成錯誤的封裝處理,再傳遞給前臺進行顯示,從而減少開發的代碼量,提高框架的可維護性。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
夜夜嗨av一区二区三区四区| 色综合视频一区中文字幕| 久久久99久久精品女同性| 国产精品美女久久久久av超清| 国产97在线播放| 亚洲天堂开心观看| 久久精品免费电影| 91热福利电影| 在线观看91久久久久久| 国产欧美日韩中文| 亚洲欧美日韩图片| 国产99视频精品免视看7| 国产一区二区三区在线观看网站| 久久精品国产电影| 久久精品久久久久电影| 亚洲一区二区三区四区视频| 日韩中文字幕在线| 欧美一级片免费在线| 九九九久久国产免费| 亚洲a中文字幕| 亚洲黄色片网站| 国产精品午夜国产小视频| 日本不卡视频在线播放| 北条麻妃一区二区三区中文字幕| 精品在线欧美视频| 亚洲最大成人在线| 欧美一级淫片aaaaaaa视频| 国产精品美女久久久久av超清| 国产精品扒开腿做爽爽爽视频| 色偷偷噜噜噜亚洲男人的天堂| 91精品国产自产在线老师啪| 欧美天天综合色影久久精品| 中文在线资源观看视频网站免费不卡| 国产精品2018| 一区二区三区高清国产| 久久夜色精品亚洲噜噜国产mv| 91久久综合亚洲鲁鲁五月天| 国产精品白嫩美女在线观看| 2019中文字幕在线| 精品欧美一区二区三区| 国产美女精品视频| 97色在线视频观看| 尤物yw午夜国产精品视频明星| 日韩在线视频中文字幕| 欧美精品一区二区三区国产精品| 九九久久久久久久久激情| 亚洲人成电影网站色www| 国内揄拍国内精品| 全亚洲最色的网站在线观看| 欧美乱妇高清无乱码| 成人在线小视频| 欧美在线观看日本一区| 日韩中文字幕在线播放| 国产日本欧美在线观看| 97在线观看视频| 国产91精品久久久久久久| 国产经典一区二区| 欧洲成人免费视频| 欧美激情精品久久久久久蜜臀| 日韩欧美第一页| 97婷婷大伊香蕉精品视频| 日韩av影视综合网| 精品国产一区久久久| 69**夜色精品国产69乱| 九九热这里只有在线精品视| 亚洲男人第一av网站| 国产女人精品视频| 全球成人中文在线| 亚洲精品美女视频| 尤物九九久久国产精品的特点| 欧美激情成人在线视频| 国产精品成人va在线观看| 欧美在线中文字幕| 国产999精品久久久| 91精品久久久久久久| 国模精品一区二区三区色天香| 91av视频在线免费观看| 日本三级韩国三级久久| 日韩av免费在线播放| 亚洲天堂开心观看| 视频在线观看99| 成人激情视频在线播放| 日韩av免费看| 日本不卡免费高清视频| 久久99精品国产99久久6尤物| 日韩在线观看免费网站| 欧美日韩激情小视频| 亚洲第一福利视频| 国产精品久久久久久久久久| 欧美激情国产日韩精品一区18| 91av视频在线观看| 国产女同一区二区| 欧美精品videos另类日本| 亚洲久久久久久久久久久| 亚洲国产精品yw在线观看| 中文字幕久热精品在线视频| 欧美日本高清一区| 大胆人体色综合| 国产精品h片在线播放| 亚洲男人天堂2024| www.欧美精品一二三区| 97久久精品在线| 国产成人综合精品| 欧美电影在线观看完整版| 精品亚洲va在线va天堂资源站| 91av在线视频观看| 午夜精品99久久免费| 亚洲精品久久久久中文字幕二区| 免费99精品国产自在在线| 在线观看国产精品日韩av| 国产精品自拍小视频| 日韩中文字幕在线播放| 日日噜噜噜夜夜爽亚洲精品| 亚洲视频网站在线观看| 亚洲摸下面视频| 国产日韩欧美黄色| 日韩有码在线播放| 亚洲精品欧美日韩专区| 久久久久久91| 日韩中文字幕精品视频| 国产精品最新在线观看| 欧美专区第一页| 日韩电影在线观看永久视频免费网站| 国产精品福利在线观看网址| 国产精品久久久久秋霞鲁丝| 亚洲性无码av在线| 91精品国产99久久久久久| 亚洲片在线资源| 日韩人体视频一二区| 亚洲一区二区日本| 在线免费看av不卡| 亚洲自拍中文字幕| 福利一区福利二区微拍刺激| 成人午夜一级二级三级| 亚洲欧美日韩国产中文| 国产精品午夜一区二区欲梦| 91精品综合视频| 2020久久国产精品| 中文字幕在线看视频国产欧美在线看完整| 久久男人资源视频| 国产精品伦子伦免费视频| 日韩h在线观看| 亚洲欧美自拍一区| 欧美激情一二三| 久久99精品久久久久久琪琪| 亚洲午夜精品久久久久久久久久久久| 欧美大片免费观看在线观看网站推荐| 青青草一区二区| 在线观看日韩视频| 国产欧美一区二区白浆黑人| 热久久这里只有精品| 欧美激情在线有限公司| 色狠狠久久aa北条麻妃| 日韩av综合中文字幕| 亚洲一区二区中文字幕| 亚洲欧洲自拍偷拍| 欧美特级www| 色av中文字幕一区| 亚洲欧洲日产国码av系列天堂| 亚洲天堂精品在线| 欧美成人高清视频| 久久97精品久久久久久久不卡| 国内精品小视频在线观看| www.欧美三级电影.com|