struts2中常用Result类型的用法

宸瑜 宸瑜 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
一、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()方法后于构造方法。
...全文
评论 5
收藏 已收藏
分享
返回顶部
宸瑜
Web 开发 81,108 成员 341,721 内容