Struts 2 - 结果和结果类型

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

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

  • 成功登录

  • 登录失败 - 用户名或密码不正确

  • 帐户已锁定

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

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

Struts附带了许多预定义的结果类型以及我们所做的任何事情.我们已经看到这是默认的结果类型 dispatcher ,它用于分派到JSP页面. Struts允许您使用其他标记语言来显示视图技术,并且流行的选择包括 Velocity,Freemaker,XSLT Tiles .

调度程序结果类型

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

我们在前面的例子中看到了"速记"版本,我们提供了一个JSP路径作为结果标记.

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

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

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

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

FreeMaker结果类型

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

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 = "com.IT屋.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文件,就像我们在示例章节中创建它们一样.

现在右键单击项目名称,然后单击导出> WAR文件创建War文件.

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

Hello World Struts 4

输入值"Struts2"并提交页面.你应该看下一页.

Hello World Struts 5

As你可以看到,这与JSP视图完全相同,只是我们不依赖于使用JSP作为视图技术.我们在此示例中使用了Freemaker.

重定向结果类型

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

我们可以在<结果的正文中提供位置...&GT;元素或作为< param name ="location">元件.重定向还支持解析参数.这是一个使用XML : 配置的示例;

<action name = "hello" 
   class = "com.it1352.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 示例,以便更好地理解.