1.在struts2中,为了访问HttpSession实例,struts2提供了一个ActionContext类(com.opensymphony.xwork2.ActionContext
),该类提供一个getSession的方法,此方法的返回值类型不是HttpSession,而是Map(struts2为了简化action的测试,将action类与servlet API完全分离,因此返回值类型是Map,而不是HttpSession),然后struts2的系列拦截器会负责此session与HttpSession之间的转换。
ActionContext.getContext().getSession().put("user" , getUsername());
对于上面的语句放入session中的属性user的值,在jsp中可通过jsp2.0表达式(jsp2.0表达式可参考《轻量级J2EE企业应用实战》)取得:
<%@ page language="java" contentType="text/html; charset=GBK"%>
<html>
<head>
<title></title>
</head>
<body> ${sessionScope.user},您已经登陆!
</body>
</html>
2.action中的成员属性,并不一定用于封装用户的请求参数,也可能是封装了action需要传入下一个页面需要显示的值。实际上,这些值将被封装在ValueStack中。
当action设置了某个属性值后,struts2将这些属性值全部封装在一个叫做struts.valueStack的请求属性里。
在Jsp中可以通过以下语句来获取包含全部信息的ValueStack对象
//获取封装出去信息的ValueStack信息
ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");
通过OGNL表达式能非常方便的访问ValueStack对象封装的信息。从数据结构上看,ValueStack有点类似Map结构,但它比Map结构更强大(可以根据表达式来查询值)。Action所有的属性都被封装到了ValueStack对象中,Action中的属性名可以理解为ValueStack中value的名字。
//调用ValueStack的findValue方法查看某个表达式的值
vs.findValue("books");
3.当控制器需要调用业务逻辑方法时,比较成熟的做法是利用工厂模式来管理业务逻辑组件实例,或通过依赖注入将业务逻辑组件实例注入控制器组件。实际项目中不会在控制器中直接创建业务逻辑组件的实例,因为控制器不应该关心业务逻辑组件的实例化过程。
4.struts2应用中的国际化
以下命令将包含非西欧字符的资源文件处理成标准的ASCII格式
native2ascii messageResouce.properties messageResouce_zh_CN.properties
资源文件命名格式:
basename_语言代码_国家代码.properties
将资源文件放在WEB-INF/classes路径下,加载资源文件可以通过struts.proterty文件来定义,如:
//定义struts2的资源文件的baseName是messageResource
struts.custom.il8n.resources=messageResource
struts2默认加载WEB-INF/classes下的资源文件。如果资源文件放在WEB-INF/classes的子目录,例如保存在WEB-INF/classes/lee路径下,则需要修改struts.property的定义如下:
//定义struts2的资源文件的baseName是messageResource,且文件放在WEB-INF/classes/lee目录下
struts.custom.il8n.resources=lee.messageResource
5.数据校验
1)继承ActionSupport
ActionSupport类是一个工具类,已实现了Action接口,还实现了Validateable接口,提供数据校验功能。通过继承ActionSupport类,可以简化struts2 的action开发。
在Validateable接口中定义了一个validate()方法,重写该方法,如果校验表单输入域出现错误,则将错误添加到ActionSupport类的fieldErrors域中,然后通过OGNL表达式负责输出。
在action类中重写validate方法后,此方法会在execute方法之前执行,执行后,如果Action类的fieldErrors域中已经包含数据校验错误,请求将被转发到input逻辑视图处。
为了在校验失败后,系统能将视图转入input处,必须在配置该action时配置input属性。如:
<!--定义login的Action -->
<action name="Login" class="lee.LoginAction">
<!-- 定义input的逻辑视图名,对应login.jsp页面 -->
<result name="input">/login.jsp</result>
<!-- 定义error的逻辑视图名,对应error.jsp页面 -->
<result name=" error ">/error.jsp</result>
<!-- 定义success的逻辑视图名,对应welcome.jsp页面 -->
<result name="success">/welcome.jsp</result>
</action>
提示:struts2的<s:form .../>默认已经提供了输出校验错误的能力。
ActionSupport增加了让提示信息国际化的能力,ActionSupport提供的getText方法可以根据资源文件加载获得国际化提示信息。
2)使用struts2的校验框架
类似struts1,struts2也允许通过定义配置文件来完成数据校验,struts2的校验框架实际上是基于XWork的validator框架。
struts2提供了大量的数据校验器,包括表单域校验器和非表单域校验器。
分享到:
相关推荐
《Struts2 技术内幕——深入解析Struts2架构设计与实现原理》
struts2学习笔记,非本人所写,但有学习的价值,总结的很好,分享一个!
核心技术篇首先分析了Struts2中多种具有代表性的设计模式,然后对Struts2中的精华——OGNL表达式引擎和XWork框架的原理及机制进行了全面深入的分析和讲解。运行主线篇首先对Struts2的两大运行主线——初始化主线和...
Struts2 技术内幕——深入解析Struts2架构设计
Struts2 技术内幕——深入解析Struts2架构设计与实现原理
旺旺教师————Struts2旺旺教师————Struts2旺旺教师————Struts2旺旺教师————Struts2
书中通过大量的示范性实例(全书范例近百个),逐一、详细地讲解了Struts2各知识点的用法,并细致地讲解每个用法的各种参数、选项,可以帮助读者入门到精通。 3.配合案例,快速提高 《Struts 2.1权威指南》最后配备...
本资源包含两个学习Struts的资料: 1.struts2基础.chm 2.Struts2+技术内幕——深入解析Struts2架构设计与实现原理.pdf 欢迎有兴趣的童鞋下载学习。
这是学习struts2时记得重点笔记,包括了一些原理,ognl语句的编写,以及如何设置拦截器等等一些基本知识,起到复习和巩固的作用
深入解析Struts2架构设计与实现原理》以Struts2的源代码为依托,通过对Struts2的源代码的全面剖析深入探讨了Struts2的架构设计、实现原理、设计理念与设计哲学,对从宏观上和微观上去了解Struts2的技术内幕提供了...
struts2学习笔记总结
Struts2.1权威指南——基于WebWork核心的MV Struts2.1权威指南——基于WebWork核心的MV Struts2.1权威指南——基于WebWork核心的MV Struts2.1权威指南——基于WebWork核心的MV
Struts2输入校验总结 Struts2输入校验
Struts2 和Struts1同样也提供了校验框架,但在Struts2 已经不再把校验框架做为一个插件,而是已经内置到了Struts2中,而且配置起来更为简单方便,功能也更强大。
Struts2.1权威指南——基于WebWork核心的MV.Struts2.1权威指南——基于WebWork核心的MV.Struts2.1权威指南——基于WebWork核心的MV.Struts2.1权威指南——基于WebWork核心的MV.
Struts2学习笔记,介绍了struts2的基础部分
NULL 博文链接:https://changluo.iteye.com/blog/1842213
Struts2.1权威指南——基于WebWork核心的MV Struts2.1权威指南——基于WebWork核心的MV Struts2.1权威指南——基于WebWork核心的MV
Struts2.1权威指南——基于WebWork核心的MV Struts2.1权威指南——基于WebWork核心的MV Struts2.1权威指南——基于WebWork核心的MV