本文摘要:Struts2 ->JSP页面收参、VS(ValueStack)、OGNL表达式、Struts2<s/>标签
一:Struts2 ->JSP页面收参
1. 收集零散数据与对象
后台代码:
Jsp页面
实体类:
2. List、Set、Map集合
二:值栈(ValueStack)
1.概念:Struts2中逻辑上的存储区域,统筹管理一次请求中所涉及到的所有数据。
2.作用:ValueStack提供了常用的独立栈结构(Root),并将对作用域的操作进行了封装(Context),简化用户的的数据访问方式(OGNL)。
3.好处:与视图层解耦(JSP运行效率低,只有JSP有内置对象),实战中会选择模板技术(freemarker、Velocity [vəˈlɒsəti] 没有内置对象)
4.注意:每次请求Action都会产生独立的ValueStack对象。
5. root区(List):常用//栈结构,访问时从栈顶向下查找。如使用"[0].属性名"则访问0开始的所有子集。如果使用"[1].属性名"则访问1开始的所有子集。
I. 概念:Struts提供的一个栈结构存储区域,主操作区域,访问便利,主要用来操作Action相关数据。//存储Action对象本身、请求参数。
II. 访问root区:
6. context区(Map):偶然用到(用户可手动将数据存入session、application中)
I. 概念:Struts提供的一个Map结构存储区域,主要用来操作JavaEE作用域。
7.经验:ValueStack的两种使用方式
I.通过Action的root区存储 请求数据、临时数据。
II.通过ValueStack手动存入数据(vs.setValue(expr,obj)),将保存在context区中。
III.使用Struts2对于操作数据时,都需要使用ValueStack进行,会由ValueStack对接JavaEE标准中的几个作用域对象。//不再直接操作内置对象
注意:同一个浏览器发送多次请求,每个请求对应一个ValueStack(一次请求有效),但共享同一个session、application。(URL没有重写的话,Cookie不能禁)
8.总结Struts2中的OGNL(对象图导航语言):操作ValueStack的必要途径!
I.使用OGNL时必须找到一个根对象(可以成为根对象的有5个[ root、request、session、application、parameters]默认是root),访问时可通过"根"查找到与之关联的所有对象。需要使用其他"根"时,则需要应用"#根对象名称"的语法访问,但同时也会增加访问常用对象的繁琐程度。
II.context存在的主要原因就是,在OGNL中不支持多个root对象,如果需要访问其他作用域对象时,则需要使用OGNL定位到Context中的不同对象,再进行访问。
三:ognl表达式(Object-Graph Navigation Language):对象导航图语言
1. 概念:
I. 语法与EL相似、功能强大、简单的表达式语言。
II. 可直接访问对象的getters方法、还可直接访问对象的普通方法。
III. OGNL是一套独立的、完整的技术组件、不属于Struts本身。
2. 在已有的List中取值:
3. 在已有的Map中取值:
4. 总结:
I. List:直接书写属性名称,即可完成List中的逐个对象查找,以及目标属性的获取。
II. Map:#为前缀+key查找Map中的目标对象,再导航查找各个属性。
四:Struts2标签 +ognl表达式完成在JSP页面的取值 ->替代EL+JSTL
1. 作用:逻辑处理,用以替代EL表达式。
2. 使用方式:
I. 引入标签库:<%@taglib uri="/struts-tags" prefix="s" %>
II. 选择标签:
1). 单条数据展示:
2). 条件判断:
3). 遍历:
3. Struts2高级标签:
I. 获取日期类型、并格式化:
II. URL重写:
1). JSP到JSP:
2). JSP到Action: