`

Result

 
阅读更多

Action方法被调用后,返回结果字符串,用它来匹配xml中定义的resultType的name属性,如果匹配上则使用该Result来处理结果:渲染页面、下载文件等等。

 

 public Result createResult() throws Exception {

        if (explicitResult != null) {
            Result ret = explicitResult;
            explicitResult = null;

            return ret;
        }
        ActionConfig config = proxy.getConfig();
        Map<String, ResultConfig> results = config.getResults();//获取该Action的结果配置

        ResultConfig resultConfig = null;

        try {
            resultConfig = results.get(resultCode);//根据返回值来匹配
        } catch (NullPointerException e) {
            if (LOG.isDebugEnabled()) {
                LOG.debug("Got NPE trying to read result configuration for resultCode [#0]", resultCode);
            }
        }
        
        if (resultConfig == null) {
            // If no result is found for the given resultCode, try to get a wildcard '*' match.
            resultConfig = results.get("*");
        }

        if (resultConfig != null) {
            try {
                return objectFactory.buildResult(resultConfig, invocationContext.getContextMap());//实例化Result
            } catch (Exception e) {
                if (LOG.isErrorEnabled()) {
                    LOG.error("There was an exception while instantiating the result of type #0", e, resultConfig.getClassName());
                }
                throw new XWorkException(e, resultConfig);
            }
        } else if (resultCode != null && !Action.NONE.equals(resultCode) && unknownHandlerManager.hasUnknownHandlers()) {
            return unknownHandlerManager.handleUnknownResult(invocationContext, proxy.getActionName(), proxy.getConfig(), resultCode);
        }
        return null;
    }

  private void executeResult() throws Exception {
        result = createResult();

        String timerKey = "executeResult: " + getResultCode();
        try {
            UtilTimerStack.push(timerKey);
            if (result != null) {
                result.execute(this);//执行结果
            } else if (resultCode != null && !Action.NONE.equals(resultCode)) {
                throw new ConfigurationException("No result defined for action " + getAction().getClass().getName()
                        + " and result " + getResultCode(), proxy.getConfig());
            } else {
                if (LOG.isDebugEnabled()) {
                    LOG.debug("No result returned for action " + getAction().getClass().getName() + " at " + proxy.getConfig().getLocation());
                }
            }
        } finally {
            UtilTimerStack.pop(timerKey);
        }
    }

 

 



 

  • 大小: 403.8 KB
分享到:
评论

相关推荐

    result接口jar包.rar

    本篇文章将深入探讨“result接口”和相关的JAR包,以及它们在实际开发中的应用。 首先,让我们理解“result接口”。在软件工程中,接口是一种定义了特定功能的合同,它规定了类或对象必须实现的方法。Result接口很...

    jsp\No result defined for action and result input.doc

    ### Struts2框架中“No result defined for action and result input”错误解析及解决方法 #### 错误概述 在Struts2框架中开发Web应用程序时,可能会遇到一个名为“No result defined for action and result input...

    struts2中常用Result类型(type)的用法和出现的问题

    Struts2 中常用 Result 类型(type)的用法和出现的问题 Struts2 中的 Result 类型(type)是指在 Struts2 框架中用于确定 action 执行结果的方式。常用的 Result 类型有 dispatcher、redirect 和 chain 三种。这三...

    struts2 result配置详解

    Struts2 Result 配置详解 Struts2 框架中 Result 配置是一种非常重要的配置,它直接影响着应用程序的执行结果。Result 配置通常用于定义 Action 的执行结果,例如将结果.redirect 到一个新的 URL,或者将结果....

    struts2的result标签使用

    在Struts2中,`Result`标签是核心组件之一,用于定义动作执行后如何跳转到相应的视图。让我们深入探讨一下`Result`标签的使用以及在Struts2框架中的作用。 ### 1. Struts2框架概述 Struts2框架基于MVC设计模式,...

    自定义注解Result实例

    Result result = method.getAnnotation(Result.class); if (result != null) { System.out.println("返回信息: " + result.message()); System.out.println("状态码: " + result.code()); // 调用方法并获取...

    struts2配置文件之result

    ### Struts2配置文件中的Result详解 在Struts2框架中,`result`是一个非常重要的概念,它主要用于定义Action执行完成后页面的跳转规则。本文将深入探讨Struts2配置文件中`result`的配置方法及其不同的类型,并通过...

    struts2 result转向到action

    ### Struts2 Result 转向到 Action 的深入解析 #### 一、基本概念与应用场景 **Struts2** 是一款流行的 Java Web 开发框架,它支持多种开发模式(如 MVC),并提供了一系列用于简化 Web 应用程序开发的功能。在 ...

    Struts2 result和type

    ### Struts2中的Result与Type详解 #### 一、引言 在Struts2框架中,`Result`和`Type`是两个非常重要的概念。它们主要用于控制Action执行完毕后页面的跳转方式以及如何处理Action返回的结果。通过合理配置`Result`与...

    struts2 Result类型

    Struts2 Result类型是Struts2框架中一个关键的概念,它是动作执行完成后跳转到下一个页面或处理逻辑的核心机制。Result类型定义了如何处理动作执行的结果,使得开发者能够灵活地控制应用程序的流程。 首先,我们...

    使用Java集合模拟JSTL包中的Result接口功能

    在JSP/Servlert/JavaBean技术课程中,本人讲解第六章讲高级JDBC时,再讲到书写通用BaseDAO时,标准课件使用了jstl包中的Result接口来封装数据库的结果集。这样做的结果本人觉得比较麻烦,因为需要导jstl包。如果不想...

    redirectaction 出现404 - result 'null' not found例子演示

    在Struts2框架中,`RedirectAction`是用于实现页面重定向的一种机制,但有时可能会遇到"result 'null' not found"的错误。下面我们将深入探讨这个问题以及如何解决它。 首先,Struts2是Java Web应用程序的一个强大...

    struts2 result type 介绍

    在Struts2中,Result Type是控制流程的重要部分,用于定义动作执行后如何转发或重定向到特定的视图。这篇博客文章将深入探讨Struts2的Result Type,以及它在实际应用中的工作原理。 首先,我们需要了解Struts2的...

    【小程序云开发】本地调试和云端测试的结果不一致,返回值result为null

    1.调用云函数的时候,云函数调试时返回值不是null,但是到了前端拿到的result却是null。 2.调试云函数,本地调试和云端测试/真机测试结果不一样。表现为本地测试正常运行,云端和真机出错。 解决方法:异步操作的...

    struts2中result类型之redirect

    在Struts2框架中,`Result`类型是动作(Action)执行后的一种处理方式,它定义了动作执行完后页面跳转或者数据处理的行为。`Redirect`是`Result`类型中的一种,它涉及到Web应用程序中的URL重定向概念,对用户浏览器...

    No result defined for action.doc

    在IT领域,尤其是在Web开发中,遇到“No result defined for action”这类错误是常见的问题,尤其当使用Struts2框架时更为突出。此类错误通常指向在控制器(Action)中未正确配置或实现结果集(Result),导致请求...

    struts2的action的几种result type说明

    在Struts2中,Action是业务逻辑的核心组件,而Result是控制流程的关键部分,它定义了Action执行后如何展示结果。Result Type是Result的一种预定义类型,决定了结果如何被处理和展现给用户。在`struts-default.xml`...

    Data_Result.zip

    文件“beta_result”、“result”、“abg_result”、“gamma_result”和“alpha_result”很可能是不同迭代步骤的配准结果,或者是不同参数设置下的ICP算法输出。这些结果文件通常包含配准后的点云数据,以及与原始...

    android studio插件自动化删除lint-result.xml资源Demo

    本Demo——"android studio插件自动化删除lint-result.xml资源",就是这样一个实用工具,它的目标是帮助开发者自动删除不再需要的`lint-result.xml`文件,从而简化工作流程。这个插件设计得非常简单,易于安装和使用...

    难经3:Struts2,拦截器拦不住Result?

    标题中的“难经3:Struts2,拦截器拦不住Result?”揭示了这是一个关于Struts2框架中拦截器(Interceptor)与结果(Result)交互问题的讨论。在Struts2框架中,拦截器是实现业务逻辑和控制逻辑之间解耦的重要机制,而...

Global site tag (gtag.js) - Google Analytics