知识大全 JSF和struts基于框架的错误控制与封装处理

Posted

篇首语:既然选择远方,就注定风雨兼程。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 JSF和struts基于框架的错误控制与封装处理相关的知识,希望对你有一定的参考价值。

JSF和struts基于框架的错误控制与封装处理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在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( 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( 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 oute = null

  if (methodBinding != null)

  fromAction = methodBinding getExpressionString()

  try

  oute = (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 ponent with id + event getComponent() getClientId(facesContext) e)

  

  NavigationHandler navigationHandler = application getNavigationHandler()

  navigationHandler handleNavigation(facesContext fromAction oute)

  // Render Response if needed

  facesContext renderResponse()

  

   

  监听器配置 faces config application xml

  代码

   <application>        <variable resolver> springframework web jsf DelegatingVariableResolver</variable resolver> <message bundle>resources application</message bundle> <locale config> <default locale>en</default locale> </locale config> <action listener> snailportal webframework listener GlobalActionListener</action listener> </application> 

cha138/Article/program/Java/ky/201311/28909

相关参考

知识大全 基于hibernate的开源通用查询框架-bba96

  bba框架当前版本包含  bbacore核心框架封装HibernateCriteria提供方便的查询以及分页支持查询参数  bbastruts基于Struts的开发框架依赖core提供便捷的CRU

知识大全 简谈JSF与Struts的功能比较[1]

简谈JSF与Struts的功能比较[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  首先事件

知识大全 简谈JSF与Struts的功能比较[4]

简谈JSF与Struts的功能比较[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Back

知识大全 简谈JSF与Struts的功能比较[2]

简谈JSF与Struts的功能比较[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  上述两个

知识大全 JSF与Struts的比较 超易懂![1]

JSF与Struts的比较超易懂![1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Stru

知识大全 JSF与Struts的比较 超易懂![3]

JSF与Struts的比较超易懂![3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Back

知识大全 深入分析JSF与Struts的异同[2]

Java进阶:深入分析JSF与Struts的异同[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 深入分析JSF与Struts的异同[1]

Java进阶:深入分析JSF与Struts的异同[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧

知识大全 简谈JSF与Struts的功能比较[3]

简谈JSF与Struts的功能比较[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Str

知识大全 JSF与Struts的比较 超易懂![2]

JSF与Struts的比较超易懂![2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  正如St