Struts2学习笔记(2)之Result

来源:互联网 发布:观山4字能值多少钱知乎 编辑:程序博客网 时间:2024/05/16 12:33

Result

Result类型

1.        dispatcher:类似于转发,是result的默认type类型,不能转发到其他action中。

2.        redirect:类似于重定向,不能重定向到其他action中。

3.        chain:类似于转发,可以转发到其他action中。

4.        redirectAction:类似于重定向,可以重定向到其他action中。

5.        跳转到其他包中的action的方式


6.        使用重定向的方式时,如何解决参数传递

1)        在action中设置一个变量存储传递过来的变量。

2)        在struts2中配置,在重定向的页面地址后加入参数。?t=${type}

3)        在重定向的页面获取:通过<s:property value=”#parameters.t”/>

OGNL(对象图导航语言)

1.        只有通过user.xxx的方式,strut2才会去调用DemainModel的构造器。

2.        想要初始化domain model,可以自己new,也可以传递参数值(上面),但这时需要保存空的构造器。

3.        Ognl的使用


1)        静态访问:@+类全路径名称+@+静态方法/静态属性

2)        访问set集合时不同能通过下标访问元素,因为set是无序的。

4.        通过bean标签初始化一个对象

<s:beanname="com.bjsxt.struts2.ognl.action.Dog" var="myDog">

                            <s:paramname="name" value="'oudy'"></s:param>

</s:bean>

1)        Bean标签有两个属性:name和var

2)        Name:给出类的全路径名称。

3)        Var:如果设置了var表示用var的变量指向类的实例对象,并把这个实例放到actionContext中。

如果没有设置var表示将类的实例放入到值栈中,当bean结束后,出栈。

5.        Set标签

1)        包含两个属性:var和value

2)        <s:set var=”age” value=”#parameters.age[0]”/>将长变量设置为段变量。并将变量放入到actionContext中。

3)        使用时通过#age即可获取到parameters.age[0]对应的值。

6.        $、#、%区别

1)        $ 用于struts配置文件,获取变量值

2)        # 获取ActionContext中的值

3)        %将原本属性的文本解析为ognl,对于本来就是ognl的属性不起作用

<s:propery> <s:include>

7.        获取错误信息fieldError标签

1)        在action中通过this.addFieldError(name,value);添加错误信息。

2)        在jsp中使用struct标签:<s:fieldError name=”name”/>取出错误信息。

3)        或者:<s:property value=”errors.name[0]”/>

声明式异常

1.        在struts2中处理action中抛出的异常:

<exception-mapping result=”error” exception=”java.sql.SQLException”>

表示当action抛出java.sql.SQLException异常时,显示result为error的视图。

2.        设置全局的异常处理


1)        编写一个bbs2009_default包

2)        在包中设置global-resluts和global-exception-mapping

3)        在其他包中继承这个包:extends=”bbs2009_default”。

4)        处理过程:

a)        Action抛出异常,在自己的result中有没有能处理这个异常的exception

b)        没有则到父类包中找,即bbs2009_default中找

c)        找到后通过global-result找到相应的result,然后显示视图。

3.        原理:(由拦截器实现)

1)        所有的包都继承structs-default,在这个包中定义了许多拦截器。

2)        其中有一个Exception的拦截器。

3)        在这个拦截器中的拦截方法intercept,参数是ActionInvocation,这个参数封装了action的执行。

4)        执行ActionInvocation#invoke(),即执行action的execute()方法。得到result。

5)        当action中抛出异常时,会被拦截器以catch方式捕获到这个异常,之后再找到对应的exceptionMapping,将这个result为最终的result,返回。

6)        找到相应的result,显示视图。


1 0