Struts2之Struts2的标签库
前言:
Struts2提供了大量的标签 ,用来帮助开发表现层页面,这些表现一方面解决了美观性的需求,因为它们具有html标签一样的外观,另一方面它们解决了功能性的需求,
因为它们具有jsp脚本一样的逻辑控制能力。相对于struts1提供的标签库,struts2的标签库功能更加强大,而且简单易用。
1.Struts2标签基础:
struts2把所有的标签都定义在URI为“/struts-tags”的空间下,这点与struts1不同。
struts2提供的标签可以分为三大类:
UI标签: 主要是用于生成Html元素的标签
UI标签又可分为:
表单标签:主要用于生成Html页面的form元素。
非表单标签:主要用于生成页面上的树,Tab页等标签
非UI标签 : 主要是用于数据访问,逻辑控制的标签
非UI标签又可分为:
流程控制标签:主要包括实现分支,循环等流程控制标签
数据访问标签:主要用于输出后台传过来的值。
Ajax标签: 主要是用于支持ajax的标签
使用struts2的标签:
使用<%@taglib prefix="s" uri="/struts-tags" %> 在页面身上导入标签库 prefix属性是为标签库的前缀
2.OGNL表达式语言: #
OGNL表达式的功能类似于EL表达式功能,就是把“存入特定银行中的对象的值取出来”,在未使用OGNL表达式时,这几大银行是request,response,session,application
等等。而使用OGNL表达式时,OGNL表达式维护了一个比较复杂的银行结构:
Stack Context: 这是最大银行 所有的其他银行 对象 都放在它中
Value Stack: 这是Stack Context银行中,比较重要的部门,它用于存放 系统创建的Action类的实例对象 把存入其中的Action实例对象称为根对象
Action Context: 这是Stack Context银行中,一个普通的部门 , 它用于存放 一次请求某个Action类时 生成的上下文对象 ,若在该上下文对象对象中放入的值 ,会直接放入Stack Context中
Stack Context银行还可以包含
parameters对象
request对象
session对象
application对象
attr对象:
关系图如下:
在Action处理中我们可以选择把一个值放入parameters对象 request对象 request对象 attr对象这些普通的对象中去(放在Stack Context中),也可把值放入Action Context的对象中(也是放在 Stack Context中),也可以选择把要返回值放入该Action类的实例对象中去(放入在Value Stack中)。
由于把值放入Action实例对象中 ,即存在Value Stack中 ,在页面上取值时比较方便,所有Struts2建议我们把要放回的值放在Action实例对象中,而不是通过得到parameters对象 request对象 request对象 attr对象(这些称为命名对象)等Servlet的相关对象,把值放入它们之中。
访问value Stack中Action实例对象的值:
${name} 或 标签<s:property value="name">
访问命名对象中值:
标签<s:property value="#request.name ">
OGNL中的集合操作:
创建一个List集合,里面包含e1,e2,e3三元素 : {e1,e2,e3}
创建Map类型集合: #{key1:value1,key2:value3,key3:value3}
提供两个运算符 : in和 not in 判断某个元素是不是在指定集合中 和 某个元素是不是不在某个集合中 返回boolean值
表达式:'foo' in {'foo','bar'} 返回 true
'foo' not in {'foo','bar'} 返回 false
OGNL提供访问某个类的静态成员的功能:
首先要在struts.xml文件中通过常量struts.ognl.allStaticMethodAccess 设置为 true
OGNL通过如下规则访问某个类的静态成员 :
访问类的静态Field : @className@staticField
访问类的静态方法: @className@staticMetod(value1,value2)
如:
<s:property value="@java.lang.System@getenv('JAVA_HOME')"> 输出jdk的目录 访问System类的静态getenv()方法
<s:property value="@java.lang.Math@PI"> 显示3.1415926.... 访问Math类的静态Field PI
通过上面可以看出 OGNL表达式与EL表达式 不同 OGNL表达式必须结合Struts2的标签 才能完成值得输出 而EL表达式可以直接输出放在几大对象中的值。
3.UI标签:
表单标签:
非表单标签:
4.非UI标签:
流程控制标签: 共有9个
if :<s:if test=" " ></s:if> test属性是一个可以返回boolean值的 表达式
else if : <s:elseif test=" "></s:elseif> test属性是一个可以返回boolean值的 表达式
else : <s:else> </s:else>
iterator : <s:iterator value=" " id=" " status=" "> </s:iterator> value属性是被迭代的集合,或者数组 id属性 是迭代元素的ID status属性指定当前迭代器的实例对象名(该对象在Stack Context中 该对象有属性
count:当前迭代了几个对象那个 index:当前迭代的对象的索引 even:当前迭代元素的索引是不是偶数 odd:当前迭代元素的索引是不是奇数 first:当前迭代元素是不是第一个元素 last:当前迭代元素是不是最后一个元素)
append : <s:append var=" "> apeend标签用于将多个集合对象 拼接成一个新的集合对象,并把新的集合对象放入 Stack Context中 var属性指定生成新的对象的名称
<s:param value=" "> </s:param> value属性指定 要拼接的对象
<s:param value=" "> </s:param> value属性指定 要拼接的对象
</s:append>
generator:
merge:
sort:
subset:
数据访问标签:
property: <s:property value=" "></s:property> 用于输出Stack Context , ValueStack, 和 Action Context中的值
debug : <s:debug/> 用于在页面上生成一个调试链接 可以看到 Value Stack 和 Stack Context中的值 方便输出
action:
bean:
include:
param:
set:
url:
push:
Struts2之Struts2的标签库的更多相关文章
- java框架之Struts2(4)-拦截器&标签库
拦截器 概述 Interceptor (拦截器):起到拦截客户端对 Action 请求的作用. Filter:过滤器,过滤客户端向服务器发送的请求. Interceptor:拦截器,拦截的是客户端对 ...
- (转)Struts2的标签库
http://blog.csdn.net/yerenyuan_pku/article/details/68638679 Struts2的标签库 对于一个MVC框架而言,重点是实现两部分:业务逻辑控制器 ...
- 【struts2】Struts2的运行流程
1)前提条件 在讲解流程之前,假设我们已经建立了的一个名为strutsDeepen的web工程,该工程仅仅实现了简单的用户登陆与欢迎界面.具体的实现为: 在web.xml中配置了Struts2的过滤器 ...
- Struts2入门(五)——OGNL和标签库
一.前言 OGNL和标签库的作用,粗暴一点说,就是减少在JSP页面中出现java代码,利于维护. 1.1.OGNL 1.1.1.什么是OGNL? OGNL(Object-Graph Navigatio ...
- Struts2的标签库(五)——表单标签
Struts2的标签库(五) --表单标签 几个特殊的表单标签的使用: 1.checkboxlist标签 该标签用于创建多个复选框,用于同时生成多个<input type="check ...
- Struts2的标签库(四)——数据标签
Struts2的标签库(四) --数据标签 1.action标签 该标签用于在jsp页面直接调用一个Action,通过指定executeResult参数,还可以将Action的处理结果包含到此页面中来 ...
- Struts2的标签库(三)——控制标签
Struts2的标签库(三) --控制标签 1.if/elseif/else标签 用于分支控制,取代JSP中的if语句,根据一个boolean(test属性的值)值判断是否进行下一步运算或者输出等. ...
- Struts2的标签库(二)——OGNL表达式
Struts2的标签库(二) --OGNL表达式 1.Struts2中的OGNL表达式增加了ValueStack的支持. 注:ValueStack--实际上是一个容器对象,该对象在启动Struts2框 ...
- Struts2的标签库(一)——使用Struts2的标签库
Struts2的标签库(一) --使用Struts2的标签库 1.Struts2的标签库其实就是一个自定义的标签库,所以它也有它的标签处理类和标签库定义文件: 2.和所有自定义标签一样,我们可以找到S ...
- java开发--struts2 标签库使用
在工程中使用struts2标签 一.struts2标签定义文件在struts2-core-2.0.11.1\META-INF 下面,文件名为struts-tags.tld 二.如果工程使用了servl ...
随机推荐
- as版本切换导致项目损坏,无法启动。环境依赖混乱
以下方法都不管用, 新建一个项目setting的 把main拷过去就行了!!!! Error:(5, 0) Gradle DSL method not found: 'google()'Possibl ...
- 【BZOJ2337】Xor和路径(高斯消元)
[BZOJ2337]Xor和路径(高斯消元) 题面 BZOJ 题解 我应该多学点套路: 对于xor之类的位运算,要想到每一位拆开算贡献 所以,对于每一位拆开来看 好了,既然是按位来算 我们就只需要计算 ...
- [BZOJ4195] [NOI2015] 程序自动分析 (并查集)
Description 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3,…代表程序中出现的变量,给定n个形如xi=xj或x ...
- .NET Core使用skiasharp文字头像生成方案(基于docker发布)
一.问题背景 目前.NET Core下面针对于图像处理的库微软并没有集成,在.NET FrameWork下我们已经习惯使用System.Drawing类库做简单的图像处理,到了.NET Core下一脸 ...
- CSS中image和text显示高度不一致的问题
将它们分别添加新的属性: float: left 就可以解决
- javascript使用闭包模拟私有属性和方法
最近因为做了一个项目,其中涉及到了js私有方法,这个概念在其语言里面是很常见的,很多语言都有private这个关键字,只要在一个类的前面加上private就表示申明了一个私有方法,但是javascri ...
- c#多线程同步之EventWaitHandle的应用
最近在研究前辈写的winform代码,其中有一个功能,前辈用了EventWaitHandle.初读代码,有点不理解,慢慢想来,还是可以理解的.这个功能,就是执行某项比较耗时的任务,需要打开旋转图标,等 ...
- MapReduce并行编程模型和框架
传统的串行处理方式 有四组文本数据: "the weather is good", "today is good", "good weather is ...
- Spring Boot 2.0(四):使用 Docker 部署 Spring Boot
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下. 首先构建一个简单的 Spring Boot 项目, ...
- Attrib +s +a +h +r 隐藏文件原理与破解
制作了一个PE启动盘,不过这个启动盘不能深度隐藏,否则没效果,可以又想不让别人看见PE启动盘的一些内容,防止别人误删或者修改,于是就想找一种可以隐藏文件的方法,普通的隐藏文件的方法如下: