读书人

struts2札记(四)

发布时间: 2012-08-22 09:50:35 作者: rapoo

struts2笔记(四)
十三、Struts2配置文件模块化包含(include)
<include>标签
当Struts配置文件比较多,需要模块化划分或分开成为多个配置文件时,这个功能比较好。
则需要使用<include>标签把其它的配置文件引入到Struts.xml配置文件中就可以了。
例如:有一个login.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>
<package name="login" extends="struts-default" namespace="/login">
<action name="login*" 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" />
<include file="login.xml" />
</struts>

十四、默认的Action
当用户访问的namespace下一个不存在的Action,则会将使用默认的Action。
使用<default-action-ref name=”name”>标签 其中 name属性指向下面已经定义的Action名称了。
<struts>
<constant name="struts.devMode" value="true" />

<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index"></default-action-ref>
<action name="index">
<result>/default.jsp</result>
</action>
</package>
</struts>
当前访问namespace=”/”下不存在的Action时,则返回自动转到访问/default.jsp页面。

十五、Action总结
1、实现一个Action的最常用的方式:从ActionSupport继承
2、DMI动态方式的调用:!
3、通配符配置:* {1} {2}
4、接收参数的方式(一般属性或DomainModel来接收)
5、简单参数验证addFieldError
a)一般不使用Struts的UI标签
6、访问Web元素
a)Map类型
i.IoC
ii.依赖Struts2
b)原始类型
i.IoC
ii.依赖Struts2
7、包含文件配置

02 Struts2-Result
一、Result类型 (type)
1、dispatcher
运用服务器跳转 jsp forward
不可以是Action,只可以跳转到视图
2、redirect
客户端跳转(重定向)-url发生变化
不可以是Action,只可以跳转到视图
3、chain
跳转到Action (forward action)
可以动用到Action
在访问Action时,Action前面不要加”/”
4、redirectAction
客户端跳转到Action——-url发生变化
5、freemarker
6、httpheader
发送一个http头
7、stream
下载
8、velocity
9、xslt
10、plaintext
返回页面的源码
11、titles
把页面分成几块,每个页面都可以动态的指定
<struts>
<constant name="struts.devMode" value="true" />
<package name="resultTypes" namespace="/r" extends="struts-default">
<action name="r1">
<result type="dispatcher">/r1.jsp</result>
</action>

<action name="r2">
<result type="redirect">/r2.jsp</result>
</action>

<action name="r3">
<result type="chain">r1</result>
</action>

<action name="r4">
<result type="redirectAction">r2</result>
</action>

</package>
</struts>

注:当访问不同的namespace下的Action时,则使用如下方式:
<result type="chain">
<param name="actionName">dashboard</param>//Action名称
<param name="namespace">/secure</param>//namespace值
</result>

二、全局结果集(Globle Result)
当有多个Action使用同一个结果集时,则可以使用全局结果集(Globle Result),如下:
<package name="user" namespace="/user" extends="struts-default">
<global-results>
<result name="mainpage">/main.jsp</result>
</global-results>
<action name="index">
<result>/index.jsp</result>
</action>
<action name="user" namespace="/admin" extends="user">
<action name="admin" value="true" />
<package name="user" namespace="/user" extends="struts-default">

<action name="user" namespace="/user" extends="struts-default">

<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<result type="redirect">/user_success.jsp?t=${type}</result>
</action>
</package>
UserAction类:
public class UserAction extends ActionSupport {
private int type;
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
@Override
public String execute() throws Exception {
return "success";
}
}
因为当执行Action后,已经将Action的成员属性写入了值堆栈了,因此可以在配置文件中使用${type}取出type的值。
但是只有Action才具有值堆栈的。Jsp是没有什么值堆栈的。因为当result重新定向到/user_success.jsp?t=${type}后,是不能从值堆栈中取出t的值。但是有ActionContext的,所以可以从中取出t的值。JSP代码如下:
<body>
User Success!
from valuestack: <s:property value="t"/><br/>
from actioncontext: <s:property value="#parameters.t"/>
<s:debug></s:debug>
</body>
注:<s:property value="t"/>取不到值,因为jsp不是一个Action没有值堆栈。
<s:property value="#parameters.t"/>可以取出t的值,因为#方式是从ActionContext中取属性值。
ActionContext堆栈中具有parameters这个属性是用于存储传入的参数。所以可以取出。
五、Result总结
1、常用的四种类型
a)dispatcher(默认)
b)redirect
c)chain
d)redirectAction
2、全局结果集
a)Global-result | extends
3、动态结果集(了解)
a)在Action中保存一个属性,存储具体的结果location
4、传递参数
a)客户端跳转才需要传递
b)${}表达式(不是el表达式)

读书人网 >软件架构设计

热点推荐