12 第1页 | 共2 页下一页
返回列表 发新帖
查看: 2821|回复: 14
打印 上一主题 下一主题

详谈Struts2的核心概念(下)

[复制链接]

1026

主题

1

听众

6011

积分

高级设计师

Rank: 6Rank: 6

纳金币
5996
精华
1

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2011-7-27 23:51:53 |只看该作者 |倒序浏览
5.4 使用本地的资源文件
• 本节中将介绍另外两个接口TextProvider和LocalProvider,它们都是为了使用本地的资源文件而设计的。
• 在Java中用户语言和地区的信息被封装在java.util.Local类中,而action则通过一个定义与com.opensymphony.xwork.LocaleProvider接口的方法判断使用哪个Locale获取用于显示的信息文本,这个接口中只定义了一个方法:
• Public Locale getLocale()
• 在ActionSupport中,这个方法的默认实现为:通过调用AcitonContext.getContext ().getLocale()方法,利用ActionContext获得locale的值(关于ActionContext的使用将在后面的章节详细描述)。S***ts2通过查询HttpservletRequest对象并调用它的getLocale () 方法将Local与action调用联系起来。
5.5 用ActionContext与Web容器发生联系
• 在Action的接口定义中,excute()方法并没有HttpServletRequest和HttpServletResponse参数也就是说S***ts2的Action不用去依赖于任何Web容器(不像S***ts 1必须在Web容器中才能运行),不用与那些JavaServlet复杂的请求(Request)、响应(Response)关联在一起。但在Web应用程序开发中,往往需要在Action里直接获取请求(Request)或会话(Session)的一些信息,甚至需要直接对JavaServlet Http的请求、响应操作。S***ts2 提供了一个工具,用ActionContext对象来与Web容器发生联系。
• ActionContext(com.opensymphony.xwork.ActionContext)是Action执行时的上下文,上下文可以把它看作是一个Map,它存放是Action在执行时需要用到的对象,比如:上下文放有请求的参数(Parameter)、会话(Session)、Servlet上下文(ServletContext)、本地化(Locale)信息等。在每次执行Action之前都会创建新的ActionContext,ActionContext是线程安全的,也就是说在同一个线程里ActionContext里的属性是唯一的,这样的Action就可以在多线程中使用。
5.6 高级输入
• 应用程序经常使用JavaBean表示一个域中的对象,包括User、Address、Block在内地的类就是这种JavaBean很好的例子。而在Web程序中很大一部工作都是将信息填充到这些对象中去和从Bean中获取数据信息在网页中表现。本节将以一个完整的实例来说明Sturts 2在这些方面提供了那些便利。
5.7 使用Model-Driven
• S***ts2中,提供了两种Action驱动模式:Property-Driven(属性驱动),Model-Driven(模型驱动的)。
• 模型驱动的Action很像S***ts1中的FormBean,在传递过程中有一个单独的值对象来作为参数的载体,但在S***ts2中这个值对象不必再继承任何接口,只要普通JavaBean就可以充当模型部分。很多情况下Bean的定义已经存在了,而且是不能修改的(如从外部引入的类或者是已经被大量代码引用的类),如果必须实现某个接口才能作为FromBean,不得不再新增一个类,S***ts2的这个改进非常及时。
5.8 使用Property-Driven
• Property-Driven 就是Action将直接用自己的字段来充当FormBean的功能,在S***ts2入门一章中,HelloReader这个例子就是采用的这种方法,在Action中直接包含了message属性和它set、get方法。它一般用在页面表单比较简单的情况使用,而且可以直接把属性作为Action的字段,这样就不用在另写FormBean,减少了重复代码。
• 上一节的例子如果使用Property-Driven方法,那就是将User与action类合并定义,把User中的属性值直接转移到action中去,在配置文件中也不必再增加modelDriven这个过滤器。
6 Result类型介绍
• Result是在Action执行完,一个结果返回后决定发生什么事的类。开发者可以自由的根据他们的应用和环境的需要创建自己的Result类型。例如在S***ts2中Servlet和Velocity结果类型已经被创建用来显示web应用程序的画面。本节将介绍S***ts2 内置的几种Result类型和如何自定义开发Result。
6.1 内置Result类型
• 所有的Result类型都实现了com.opensymphony.xwork.Result接口。这个接口是所有action执行结果的通用接口,不管这个结果是用来显示一个网页还是产生一个E-mail,发送一个JMS消息还是别的。
• 在s***ts-default.xml中定义了系统提供的缺省Result类型,把它们映射为action配置中可以引用的名字,在action配置就就不用再使用长类名直接使用这些别名就可以了。
6.2 默认Result
&bull; Dispatcher Result是最常用的一种result,它也是S***ts2默认的result,又称为通用resut。action执行完后,请求会导向对应的View,相当于<jsp:forword>标签实现的跳转功能。将同一个HTTP请求中的内容分发至某一个页面(dispatcher类型的result的使用)只要配置文件包含了s***ts-default.xml,而且package继承了s***ts-default,那么使用dispatcher result并不需要其他设置。示例:
&bull; <result name="success" type="dispatcher">
&bull; <param name="location">foo.jsp</param>
&bull; </result>
6.3 页面跳转 Result
&bull; Redirect Result与Dispatcher Result作用类似也是实现页面跳转。对上次的响应将重定向到指定的位置,可以理解为在客户端跳转用户又重新请求了一个新的URL。redirect是重新产生一个新的request,因此原来request保存的东西将不再有效,比如不能通过再requet.getAtrribute()取得对象,也不能取得action的实例、errors、field errors等。
&bull; Redirect Result与Dispatcher Result的区别于源于JSP篇中<jsp:forward>标签与response.redeiret()的区别。
6.4 创建action链
&bull; Chain Result是一种result 类型,它基于自己的***stack(堆栈)和result调用一个action,这样允许一个action附带着原来的状态将请求转到目标action
&bull; S***ts2提供把多个Action按照预先定义好的顺序或者流程链接起来的能力。这个特性通过给指定的Action设置一个Chain Result,然后通过一个ChainingInterceptor拦截目标Action来实现。
6.5 整合各种View技术
&bull; Velocity、Freemarker、JasperReports、xslt这4种result都是为了整合不同的视图技术而设计的。
&bull; 1.Velocity Result:Velocity是一个基于java的模板引擎(template engine)。
&bull; 2.Freemarker Result:Freemarker也是一个模板引擎,允许JavaServlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。模板用servlet提供的数据动态地生成 HTML。
&bull; 3.JasperReports result:JasperReports是一个基于Java的开源报表工具,它可以在Java环境下像其他IDE报表工具一样来制作报表。
&bull; 4.XSLT Result:XSLT Result用XSLT来转换action对象到XML。
6.6 自定义result
&bull; S***ts2也允许用户自定义自己的result类型,只要实现com.opensymphony.xwork2.Result接口就可以了。如代码5-29所示,模拟了一种result作用是根据处理结果将给指用户发送一份E-mail。这个result需要4个参数to、from、subject和body







t be continue.............
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

无效楼层,该帖已经被删除

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2012-2-7 23:24:12 |只看该作者
不错哦,谢谢楼主
回复

使用道具 举报

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2012-4-8 23:23:57 |只看该作者
不错哦,谢谢楼主
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

5#
发表于 2012-4-27 23:26:17 |只看该作者
此地無銀。。。
回复

使用道具 举报

1023

主题

3

听众

359

积分

设计实习生

Rank: 2

纳金币
335582
精华
0

最佳新人

6#
发表于 2012-5-7 23:23:44 |只看该作者
长了不少见识
回复

使用道具 举报

tc    

5089

主题

1

听众

33万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

7#
发表于 2012-5-15 23:22:30 |只看该作者
发了那么多,我都不知道该用哪个给你回帖了,呵呵
回复

使用道具 举报

462

主题

1

听众

31万

积分

首席设计师

Rank: 8Rank: 8

纳金币
2
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

8#
发表于 2012-6-17 23:24:34 |只看该作者
呵呵,真得不错哦!!
回复

使用道具 举报

   

671

主题

1

听众

3247

积分

中级设计师

Rank: 5Rank: 5

纳金币
324742
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

9#
发表于 2012-7-1 23:27:25 |只看该作者
你们都躲开,我来顶
回复

使用道具 举报

5969

主题

1

听众

39万

积分

首席设计师

Rank: 8Rank: 8

纳金币
-1
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

10#
发表于 2012-7-25 23:20:17 |只看该作者
心中有爱,爱咋咋地
回复

使用道具 举报

12 第1页 | 共2 页下一页
返回列表 发新帖
您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-24 19:04 , Processed in 0.123489 second(s), 30 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部