结果类型(Result Types)

优质
小牛编辑
134浏览
2023-12-01

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

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

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

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

但是,Struts2并没有将您与使用JSP作为视图技术联系在一起。 毕竟,MVC范例的整个目的是保持层分离和高度可配置。 例如,对于Web2.0客户端,您可能希望返回XML或JSON作为输出。 在这种情况下,您可以为XML或JSON创建新的结果类型并实现此目的。

Struts附带了许多预定义的result types以及我们已经看到的任何默认结果类型dispatcher ,它用于调度到JSP页面。 Struts允许您使用其他标记语言来显示结果,流行的选择包括Velocity, Freemaker, XSLTTiles

调度程序结果类型

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

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

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

我们还可以使用元素中的标记指定JSP文件,如下所示 -

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

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

FreeMaker结果类型

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

Hello World ${name}

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

接下来,让我们修改struts.xml以指定结果如下 -

<?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 = "cn.xnip.struts2.HelloWorldAction"
         method = "execute">
         <result name = "success" type = "freemarker">
            <param name = "location">/hello.fm</param>
         </result>
      </action>
   </package>
</struts>

让我们保留我们的HelloWorldAction.java,HelloWorldAction.jsp和index.jsp文件,就像我们在示例章节中创建它们一样。

现在右键单击项目名称,然后单击“ Export 》 WAR File以创建War文件。

然后在Tomcat的webapps目录中部署此WAR。 最后,启动Tomcat服务器并尝试访问URL http://localhost:8080/HelloWorldStruts2/index.jsp 。 这将产生以下屏幕。

Hello World Struts 4

输入值“Struts2”并提交页面。 你应该看到下一页。

Hello World Struts 5

如您所见,这与JSP视图完全相同,只是我们不依赖于使用JSP作为视图技术。 我们在这个例子中使用过Freemaker。

重定向结果类型

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

我们可以在元素的主体中提供位置,也可以在元素中提供位置。 重定向还支持parse参数。 这是使用XML配置的示例 -

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

因此,只需修改struts.xml文件以定义上面提到的重定向类型,并创建一个新文件NewWorld.jpg,只要hello操作返回成功,您将被重定向。 您可以查看Struts 2 Redirect Action示例以便更好地理解。