result元素中type的取值,type属性的取值在 struts-default.xml 中定义,如下图所示:
2、result元素中param子元素 在请求转发或者请求重定向到不同包下的动作时,都用到了result元素的子元素param。param元素的作用:依赖注入(Dependence Injection)思想:
我们通过struts-default.xml中的result-types元素中配置可以看出,每个结果类型视图其实都是靠一个类来实现的。而param元素就是将配置的参数,注入到该类中。
调用的是对应类的setter方法进行注入的。例如:setNamespace("/n2")和setActionName("action3")
示例代码如下:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true"/>
<package name="p1" extends="struts-default">
<action name="action1" class="com.itheima.web.action.Demo1Action">
<result name="success" type="chain"> <!-- 转发到不同包(不同名称空间)下的另一个动作 -->
<param name="namespace">/n2</param>
<param name="actionName">action3</param>
</result>
</action>
<!-- 没有给定动作类,默认的动作类是:com.opensymphony.xwork2.ActionSupport,没有给定动作方法,默认的动作方法是:execute -->
<action name="action2">
<result name="success" >
<param name="location">/success.jsp</param>
</result>
</action>
</package>
<package name="p2" extends="struts-default" namespace="/n2">
<action name="action3">
<result name="success" >/success.jsp</result>
</action>
</package>
</struts>
3、自定义结果类型及其配置 通过前面的内容,我们看出,其实结果类型就是一个类:
这些类都实现了com.opensymphony.xwork2.Result接口。
或者继承自该接口的实现类org.apache.struts2.dispatcher.StrutsResultSupport。
这些类都有一个doExecute方法,用于执行结果视图。
综上:我们也可以自己写一个结果视图。
例子:
输出CAPTCHA图像的结果类型。
CAPTCHA(Completely Automated Public Turing Test to Tell Computers and Humans Apart: 全自动区分计算机和人类的图灵测试) ————>简称:验证码。
步骤:
1.编写一个普通类,继承自StrutsResultSupport的类,并且重写doExcecute方法。此为自定义结果类型的类。
2.在struts.xml中进行配置。
3.在配置action时,type属性指定声明的结果类型名称。