Strut2学习——基础笔记(总)(3)

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" class="com.bjsxt.struts2.user.action.UserAction">

        <result>/user_success.jsp</result>

        <result name="error">/user_error.jsp</result>

 </action>       

</package>

Action所对应的Action类如下:

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 {

       if(type == 1) return "success";

       else if (type == 2) return "error";

       else return "mainpage";

    }

}

UserAction返回的结果集中有mainpage,但是userAction中并没有mainpageRsult,这时就会使用全局的结果庥(global-result),这人结果集中有mainpage

    当其它不同的package需要使用这个全局的Result时,则需要使用<package>标签中的extends属性来指定继承包含全局的package就可以了。如下:

<package name="admin" namespace="/admin" extends="user">

    <action name="admin" class="com.bjsxt.struts2.user.action.AdminAction">

        <result>/admin.jsp</result>

    </action>

</package>

这时package=user中的结果集就可以被package=admin中的Action使用了。

 

三、动态的结果集(dynamic result)

<struts>

    <constant name="struts.devMode" value="true" />

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

      

      <action name="user" class="com.bjsxt.struts2.user.action.UserAction">

      <result>${r}</result>

      </action>      

    </package>

</struts>

注:${}:作用是用于在配置文件中从Value stack(值栈)中取值。

    例如:${r} 表示从Value stack(值栈)中取rAction(成员属性)的值。注意这个成员属性必需具有

注:此处的${}不是el表达式。

get/set方法。

    Action类中指定了r的值。这样就动态确定了Result的值

public class UserAction extends ActionSupport {

    private int type;

    private String r;

    public String getR() {

       return r;

    }

    public void setR(String r) {

       this.r = r;

    }

    public int getType() {

       return type;

    }

    public void setType(int type) {

       this.type = type;

    }

    @Override

    public String execute() throws Exception {

       if(type == 1) r="/user_success.jsp";

       else if (type == 2) r="/user_error.jsp";

       return "success";

    }

}

四、带参数的结果集

也就是向结果集传参数

    服务器forward共享一个值栈(Value stack)

    客户端跳转则不共享

例如:

<package 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表达式)

六、项目经理:

1、  界面原型

2、  设计数据库

3、  使用什么框架构

4、  设计约定(硬编码) ***

项目名称、数据库名称、配置文件名称、Action、JSP……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值