科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道JSF和struts基于框架的错误控制与封装处理

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在struts中,通常采用的全局错误控制模式是构建一个baseAction,在其execute方法中完成前台传回方法的dispatch操作,并由 try……catch……捕获程序错误,实现错误的控制和展示。

作者:中国IT实验室 来源:中国IT实验室 2007年9月24日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

    代码


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:

    代码

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

    这样,开发人员只需要在action和managed bean里面根据业务的需要抛出指定基础类型的Exception实例,由BaseAction和ActionListener完成错误的封装处理,再传递给前台进行显示,从而减少开发的代码量,提高框架的可维护性。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章