正如前面提到的,<results>标签Struts2的MVC框架的视图中所扮演的角色。动作是负责执行业务逻辑。执行业务逻辑后,下一步是使用<result>标签显示视图。
经常有一些导航规则附加的结果。例如,如果在动作方法是对用户进行验证,有三种可能的结果。
(a)成功登录
(b)失败的登录 - 用户名或密码不正确
(c)帐户锁定。
动作方法在这种情况下,将配置有三种可能的结果字符串和三种不同的视图呈现结果。我们已经看到,在前面的例子。
但是,Struts2的不配合你使用JSP作为视图技术。毕竟了MVC模式的整个目的是,保持层分离和高度可配置的。例如,对于一个Web2.0客户端,您可能要返回XML或JSON作为输出。在这种情况下,你可以创建一个新的结果类型为XML或JSON,实现这一目标。
Struts的一些预定义的结果类型,无论我们已经看到了,这是默认的结果类型,这是用来调度分发到JSP页面。 Struts允许使用的其他标记语言的技术,目前的结果和流行的选择,包括 Velocity, Freemaker, XSLT 和Tiles.
调度(dispatcher)的结果类型是默认的类型,是用来指定,如果没有其他的结果类型。它被用来转发到一个servlet,JSP,HTML页面,等等,在服务器上。它使用RequestDispatcher.forward()方法。
在我们前面的例子中,我们看到了“shorthand”的版本,在这里我们提供了一个JSP的路径作为body的结果标记。
<result name="success"> /HelloWorld.jsp </result>
我们也可以指定JSP文件中使用一个<param name="location">的标签内的<result...>元素如下:
<result name="success" type="dispatcher"> <param name="location"> /HelloWorld.jsp </param > </result>
我们还可以提供一个分析参数,默认值是true。解析参数的位置参数确定是否将被解析为OGNL表达式。
在这个例子中,我们将看到我们如何使用FreeMaker作为视图技术。 freemaker是一种流行的模板引擎,用于生成输出,使用预定义的模板。让我们创建一个Freemaker模板文件hello.fm以下内容:
Hello World ${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.tutorialspoint.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文件。然后,这WAR部署在Tomcat的webapps目录下。最后,启动Tomcat服务器,并尝试访问URL http://localhost:8080/HelloWorldStruts2/index.jsp。这会给你以下画面:
输入值"Struts2" 并提交页面。您应该看到下一页
正如你可以看到,这是完全一样的不同之处在于,我们是不依赖于使用JSP作为视图技术的JSP视图。在这个例子中,我们已经使用Freemaker。
重定向结果的类型调用标准response.sendRedirect()方法,使浏览器来创建一个新的请求给定的位置。
我们可以提供的位置无论是在体内的<result...>元素或作为一个<param name="location">元素。重定向也支持解析的参数。下面是一个例子使用XML配置:
<action name="hello" class="com.tutorialspoint.struts2.HelloWorldAction" method="execute"> <result name="success" type="redirect"> <param name="location"> /NewWorld.jsp </param > </result> </action>
因此,只要修改struts.xml文件中定义重定向上述类型,并创建一个新的的文件NewWorld.jpg在那里你会被重定向hello操作时,将返回成功。您可以查看Struts2重定向动作 例子更好地理解。