当前位置:编程学习 > JAVA >>

struts2中常用Result类型的用法

一、dispatcher  

02    

03 (1)为缺省的result类型,一般情况下我们在struts.xml会这么写:  

04 <result name="success">/main.jsp</result>  

05    

06 以上写法使用了两个默认,其完整的写法为:  

07 # <result name="success" type="dispatcher">    

08 #          <param name="location">/maini.jsp</param>    

09 # </result>  

10    

11 第一个默认:type="dispatcher";第二个默认:设置的为location参数,location只能是页面,不能是另一个action(可用type="chain"解决)。  

12    

13 (2)实现方式  

14    

15 从doExecute方法看出,有三个出口(finalLocation为要跳转的地址):  

16    

17 pageContext.include(finalLocation);  

18    

19 dispatcher.forward(request, response); (dispatcher是根据finalLocation创建的)  

20    

21 dispatcher.include(request, response);  

22    

23 而我们知道,forward与include都是转发到context内部的资源。  

24    

25 二、redirect  

26    

27 (1)可以重定向到一个页面,另一个action或一个网址。  

28 # <result name="success" type="redirect">aaa.jsp</result>    

29 # <result name="success" type="redirect">bbb.action</result>    

30 # <result name="success" type="redirect">www.baidu.com</result>    

31    

32 (2)实现方式:  

33    

34 查看doExecute方法,只有一个出口:  

35    

36 response.sendRedirect(finalLocation);  

37    

38 sendRedirect是重定向,是重新产生一个HTTP请求到服务器,故重定向后其原来所在的action上下文就不可用了。  

39    

40 三、chain  

41    

42 (1)主要用于把相关的几个action连接起来,共同完成一个功能。  

43 # <action name="step1" class="test.Step1Action">    

44 #          <result name="success" type="chain">step2.action</result>    

45 # </action>    

46 #     

47 # <action name="step2" class="test.Step2Action">    

48 #          <result name="success">finish.jsp</result>    

49 # </action>  

50    

51 (2)实现方式:  

52    

53 查看execute()方法,主要思想如下:  

54    

55 // 根据Action名称finalActionName及要调用的方法finalMethodName来new一个代理对象proxy,并执行之  

56 # proxy = actionProxyFactory.createActionProxy(finalNamespace,     

57 #                    finalActionName, finalMethodName, extraContext);     

58 # proxy.execute();  

59    

60 (3)多个action间数据的传递  

61    

62 主要有两种方式:  

63    

64 1。由于处于chain中的action属于同一个http请求,共享一个ActionContext,故可以在上下文中获取,在页面上可以直接使用。手动获取的方法如下:  

65 # HttpServletRequest request = ServletActionContext.getRequest();     

66 # String s=(String)request.getAttribute("propName");    

67    

68 2。实现ModelDriven接口  

69    

70 在Step1Action中,加入getModel:  

71 # public Object getModel() {           

72 #          return message;     

73 # }  

74    

75 在Step2Action中,加入setModel:  

76 # public void setModel(Object o){     

77 #          System.out.println("message is:"+o);     

78 # }  

79    

80 注意,setModel的调用先于execute()方法后于构造方法。 
--------------------编程问答-------------------- --------------------编程问答-------------------- 学习了! --------------------编程问答-------------------- http://blog.csdn.net/xingfuzhijianxia/article/details/6977992这个也可以看看! --------------------编程问答-------------------- 受益了~哈

LZ,下次把页面整理一下再贴,看着方便些。。 --------------------编程问答-------------------- chain的方式在struts2官方上不太推荐。
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,