Struts 2 结果类型 Result Type

如前所述,<results> 标签在 Struts2 MVC 框架中扮演视图的角色。 Action 负责执行业务逻辑。 执行业务逻辑后的下一步是使用 <results> 标记显示视图。

结果通常附带一些导航规则。 例如,如果操作方法是对用户进行身份验证,则有三种可能的结果。

  • 登录成功
  • 登录失败 - 用户名或密码不正确
  • 帐户被锁定

在这种情况下,action 方法将配置三个可能的结果字符串和三个不同的视图来呈现结果。 我们已经在前面的示例中看到了这一点。

但是,Struts2 并不束缚我们使用 JSP 作为视图技术。 毕竟 MVC 范式的全部目的是保持层分离和高度可配置。 例如,对于 Web2.0 客户端,我们可能希望返回 XMLJSON 作为输出。 在这种情况下,我们可以为 XML 或 JSON 创建新的结果类型并实现此目的。

Struts 附带了许多预定义的结果类型,以及我们已经看到的默认结果类型分派器,用于分派到 JSP 页面。 Struts 允许我们为视图技术使用其他标记语言来呈现结果,流行的选择包括 VelocityFreemakerXSLTTiles


Dispatcher 结果类型

dispatcher 结果类型是默认类型,如果没有指定其他结果类型,则使用该类型。 它用于转发到服务器上的 servlet、JSP、HTML 页面等。 它使用 RequestDispatcher.forward() 方法。

我们在前面的示例中看到了“速记”版本,其中我们提供了一个 JSP 路径作为结果标记的主体。

<result name = "success">
   /HelloWorld.jsp
</result>

我们还可以在 <result...> 元素中使用 <param name = "location"> 标记指定 JSP 文件,如下所示

<result name = "success" type = "dispatcher">
   <param name = "location">
      /HelloWorld.jsp
   </param >
</result>

我们还可以提供 parse 参数,默认情况下为 trueparse 参数确定是否为 OGNL 表达式解析 location 参数。


FreeMaker 结果类型

在此示例中,我们将了解如何使用 FreeMaker 作为视图技术。 Freemaker 是一种流行的模板引擎,用于使用预定义的模板生成输出。 现在让我们创建一个名为 hello.fm 的 Freemaker 模板文件,其内容如下

Hello World ${name}

上面的文件是一个模板,其中 name 是一个参数,它将使用定义的操作从外部传递。 我们将把这个文件保存在 CLASSPATH 中。

接下来让我们修改struts.xml指定 result 如下

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <constant name = "struts.devMode" value = "true" />

    <package name = "helloworld" extends = "struts-default">
        <action name = "hello"
                class = "com.jiyik.struts2.action.HelloWorldAction"
                method = "execute">
            <result name = "success" type = "freemarker">
                <param name = "location">/hello.fm</param>
            </result>
        </action>
    </package>
</struts>

让我们保留我们在示例章节中创建的 HelloWorldAction.javaHelloWorldAction.jspindex.jsp 文件。

然后启动项目,在浏览器中访问页面

Struts 运行示例

在输入框中输入“Struts2”并提交。 我们会看到如下的界面。

Struts 运行示例提交界面

正如大家所看到的,这与 JSP 视图完全相同,只是我们不依赖于使用 JSP 作为视图技术。 我们在这个例子中使用了 Freemaker。


Redirect 结果类型

redirect 结果类型调用标准的 response.sendRedirect() 方法,导致浏览器创建到给定位置的新请求。

我们可以在 <result...> 元素的主体中或作为 <param name = "location"> 元素提供位置。 重定向还支持 parse 参数。 这是一个使用 XML 配置的示例

<action name = "hello"
          class = "com.jiyik.struts2.action.HelloWorldAction"
          method = "execute">
      <result name = "success" type = "redirect">
          <param name = "location">
              /NewWorld.jsp
          </param >
      </result>
</action>

因此,只需修改我们的 struts.xml 文件以定义上述 redirect 类型并创建一个新文件 NewWorld.jpg,只要 hello 操作返回成功,我们就会在该文件中被重定向。我们可以查看 Struts 2 重定向示例以获得更好的理解。

查看笔记

扫码一下
查看教程更方便