Struts2 标签库详解
Struts2标签库
包括:
OGNL
Struts2标签分类
控制标签 :(if, elseif,else, iterator, append, merge, generator, subset, sort)
数据标签 :(bean, param,date, debug, include, set, url, push)
OGNL
Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(ExpressionLanguage,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性:,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。
Struts2默认的表达式语言是OGNL
OGNL的符号--#:
1、访问OGNL上下文和Action上下文,#相当于ActionContext.getContext() .
2、构造Map
用于过滤和投影(projecting)集合
?——所有匹配选择逻辑的元素
^——只提取符合选择逻辑的第一个元素
$——只提取符合选择逻辑的最后一个元素
|
名称 |
作用 |
示例: |
|
parameters |
读取请求参数 |
<s:property value="#parameters.id"/> |
|
request |
读取request中的属性: |
<s:property value="#request.r"/> |
|
session |
读取session中的属性: |
<s:property value="#session.s"/> |
|
application |
读取application中的属性: |
<s:property value="#application.a"/> |
|
attr |
request > session > application顺序访问其属性: |
<s:property value="#attr.pc"/> |
范例:
<s:iterator value="#{'china':'中国','usa':'美国','e':'俄国'}" var="c">
<s:property value="#c.key"/>--<s:propertyvalue="#c.value"/><br/>
</s:iterator>
范例:
<s:property value="#attr.list.{sname}[0]"/>
<s:property value="#attr.list.{$#this.sid== 3}.{sname}[0]"/>
支持对象方法调用 :
<s:property value="#attr.p.doSomeThing('李四')"/>
调用保存在pageContext中的Student对象的doSomeThing()
[N]语法:
从ValueStack的第N个位置开始取值
top关键字:
取出最顶端的对象
示例::
<s:push value="'阿拉伯联合酋长国'">
<s:property value="[0].top"/>
</s:push>
从ValueStack中的第0个位置开始取出最顶部的对象,返回为”阿拉伯联合酋长国”
Struts2标签分类
1.分类:
Struts2标签库:用户界面标签库(表单/非表单标签库),非用户界面标签库(控制标签库,数据访问标签库),ajax支持标签库
2.导入taglib
<%@taglib prefix=“s”uri=“/struts-tags” %>
控制标签
1、条件标签 if…elseif…else
主要属性:: test : 测试条件
范例:
<%! Random rnd = newRandom(); %>
<% int n = rnd.nextInt(200);pageContext.setAttribute("n", n); %>
<s:if test="#attr.n % 7 == 0">恭喜,您中了一等奖! </s:if>
<s:elseif test="#attr.n % 5 ==0">恭喜,您中了二等奖! </s:elseif>
<s:else> 欢迎惠顾!</s:else>
2、迭代标签 iterator
用于循环数组,集合和Map
属性:
value:数组,集合或Map
var:当前元素
status:当前元素的状态index,count,even,odd,first,last
示例:
遍历List
<s:iterator value="{'中华人民共和国', '美利坚合众国', '阿拉伯联合酋长国'}" var="cur"status="st">
<s:property value="#st.count"/>
<s:property value="#cur"/><br/>
</s:iterator>
遍历Map
<s:iterator value="#{1: '中国', 2: '美国', 3: '日本'}" var="cur">
<s:property value="#cur.key"/>
<s:property value="#cur.value"/><br/>
</s:iterator>
3、集合合并标签 append和merge
将多个集合合并成一个集合
属性:: var - 新集合的名称
示例:
<s:appendvar="newCollection">
<s:param value="{'中国', '美国', '日本'}"></s:param>
<s:param value="{'德国', '泰国', '新加坡'}"></s:param>
</s:append>
<s:iterator value="#newCollection"var="cur">
<s:property value="#cur"/><br/>
</s:iterator>
注:merge用法和append相同,结果的组织不一样.
4、字符串分割标签 generator
将一个字符串按照指定分隔符分割成一个字符串数组
属性::
separator: 分隔符
val(value): 字符串
count:字符串數組中元素個數
示例:
<s:generator separator=","val="'中,华人,民共和,国'" var="arr"/>
<s:iterator value="#arr"var="cur">
<s:property value="#cur"/><Br/>
</s:iterator>
5、集合子集标签 subset
从集合中取出一个子集,注意:子集被放在值栈的顶部,subset标签执行完后子集自动移除
属性::
source: 集合
start: 起始索引
count: 子集中元素个数
示例:
<s:subset source="{'中国', '美国', '日本', '德国', '泰国', '新加坡'}" start="1"count="3">
<s:iterator var="cur">
<s:property value="#cur"/>
</s:iterator>
</s:subset>
6、排序标签 sort
根据定义的排序规则,对集合中的元素进行排序,排序后生成的新的集合放在值栈顶部,标签结束后自动删除.
属性::
comparator: 实现Comparator的类
source: 集合
示例:
<s:bean name="com.aptech.sorted.LengthSorted"var="ls“/>
<s:sort comparator="#ls"source="{'中1','88w','777','6666'}">
<s:iterator>
<s:property/><br/>
</s:iterator>
</s:sort>
数据标签
1、设置变量标签 set
用于设置一个新变量,并将新变量放入指定的作用域中
属性:
Var: 新变量的引用
Value:值
示例:
<s:set var="v1"value="'中华人民共和国'" scope="page"></s:set>
<s:property value="#attr.v1"/>
注:如果不指定,默认放在Stack Context中
2、栈顶置值标签 push
将某个值置于值栈的顶部,标签结束后,将从值栈中移除.
属性:
value: 即值
示例:
<s:push value="'中华人民共和国'" >
<s:property/>
</s:push>
3、javabean创建标签 bean
用于创建javabean的实例,如果设置了var值,则存于Stack Context,否则,标签结束后自动移除.
属性:
name: javabean类名(带包)
var: 名称
示例:
<s:bean name="com.aptech.entity.Student"var="stu">
<s:param name="sid">1</s:param>
<s:param name="sname">张三好</s:param>
<s:param name="sbirthday">2009-9-9</s:param>
</s:bean>
<s:property value="#stu.sbirthday"/>
4、日期格式化标签 date
格式化日期并输出
属性:
name:日期
format:格式化字符串
示例:
<%pageContext.setAttribute("d", new Date()); %>
<s:date name="#attr.d"format="yyyy年MM月dd日 HH时mm分ss秒"/>
5、调试标签 debug
用于当前环境下Value Stack和stackcontext中保存的数据
6、资源包含标签 include
用于将一个html,jsp或servlet包含到当前页面中,使用param传递参数
属性:
value:包含页面名称
示例:
<s:include value="MyHtml.html"></s:include>
7、URL生成标签 url
生成URL地址,可以通过param标签传递请求参数,如果参数为中文,自动编码
属性:
value: url值
action: action名称,自动加上.action
示例:
<s:url value="control.jsp"var="url">
<s:param name="id">中华人民共和国</s:param>
</s:url>
<a href="<s:propertyvalue="#url" />">链接</a>
<s:url action="test"var="url2"></s:url>
<s:property value="#url2"/>
8、数据输出标签 property
用于输出值栈,Stack Context中的数据
属性:
value:要输出的值
如果输出值栈中的值,不用#
如果输出Stack Context中的值,要用#
如果省略value,表示取出值栈的栈顶对象输出
总结
OGNL是标签的基础,要理解OGNL的基本使用,在struts2中,OGNL必须和标签紧密配合
控制标签包含一组条件判断标签和一组集合遍历和操作标签
数据标签包含一组数据访问相关的标签
Struts2 标签库详解的更多相关文章
- Struts2 标签库详解2
Struts2标签库 包括: OGNL Struts2标签分类 控制标签 :(if, elseif,else, iterator, append, merge, generator, subset, ...
- struts2标签库详解
要在jsp中使用Struts2的标志,先要指明标志的引入.通过jsp的代码的顶部加入以下的代码: <%@taglib prefix="s" uri="/struts ...
- Struts标签库详解【3】
struts2标签库详解 要在jsp中使用Struts2的标志,先要指明标志的引入.通过jsp的代码的顶部加入以下的代码: <%@taglib prefix="s" uri= ...
- struts2标签使用详解
Struts2常用标签总结一 介绍1.Struts2的作用 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码 ...
- Struts标签库详解【1】
struts2标签详解 要在jsp中使用Struts2的标志,先要指明标志的引入.通过jsp的代码的顶部加入以下的代码: <%@taglib prefix="s" uri=& ...
- [转]Struts标签库详解
本文转自:http://hi.baidu.com/xzkcz/blog/item/5cf9f91f01beb9f4e0fe0bd4.html Struts提供了五个标签库,即:HTML.Bean. ...
- 10.javaweb核心标签库详解
一.JSTL简介及在项目中安装配置 1, 简介 使用JSTL标签的目的就是不希望jsp中出现java逻辑代码 分类 2, JSTL的安装配置 首先将jar包中的各个标签库配置文件拷贝到项目WEB- ...
- Struts标签库详解,非常好的Struts标签详解
Struts提供了五个标签库,即:HTML.Bean.Logic.Template和Nested. HTML 标签: 用来创建能够和Struts 框架和其他相应的HTML 标签交互的H ...
- java-自定义标签&&JSTL标签库详解
自定义标签是Jav aWeb的一部分非常重要的核心功能,我们之前就说过,JSP规范说的很清楚,就是Jsp页面中禁止编写一行Java代码,就是最好不要有Java脚本片段,下面就来看一下自定义标签的简介: ...
随机推荐
- I2C总线协议图解
原帖地址:https://www.cnblogs.com/aaronLinux/p/6218660.html
- [Python设计模式] 第12章 基金理财更省事——外观模式
github地址:https://github.com/cheesezh/python_design_patterns 题目1 用程序模拟股民直接炒股的代码,比如股民投资了股票1,股票2,股票3,国债 ...
- linux 命令之 dmidecode
Dmidecode 这款软件同意你在 Linux 系统下获取有关硬件方面的信息.Dmidecode 遵循 SMBIOS/DMI 标准.其输出的信息包含 BIOS.系统.主板.处理器.内存.缓存等等. ...
- [Oracle] “表中有数据,但select count(*)的结果为0”问题的解决办法
一.问题 今天遇到了一个神奇的问题--表中有数据,但select count(*)的结果为0. 这个问题最初的表现形式是"查询报表没有分页". 最开始还以为是java端的问题.后来 ...
- php 日期处理 DateTime
获取所有的时区: print_r(timezone_abbreviations_list ()); 获取毫秒级时间戳 // php7.1+ always has microseconds enable ...
- 正则双重过滤 /// splitKey1 第一个正则式匹配 /// splitKey2 匹配结果中再次匹配进行替
/// <summary> /// 正则双重过滤 /// splitKey1 第一个正则式匹配 /// splitKey2 匹配结果中再次匹配进行替换 /// </summary&g ...
- P2P贷款全攻略,贷前、贷中、贷后工作事项解析
一.贷前调查事项 贷前调查是所有银行.小贷.P2P等等往出贷款部门的重中之重. 归根结底就是两条:让不对称信息最大限度对称.让软信息最大限度真实还原. 客户还不还款就是取决两大因素:还款能力.还款意愿 ...
- sqlite基础
常用命令 sqlite3提供的特殊命令, 以.开头: .help: 帮助 .databases: 列出数据库 .tables: 列出表名 .open dbname: 打开数据库 .save dbnam ...
- (10) 如何MySQL读压力大的问题
如何进行读写分离 由开发人员根据所执行的SQL类型连接不同的服务器 由数据库中间层实现读写分离 读写分离时,需要注意,对于实时性要求比较高的数据,不适合在从库上查询(因为主从复制存在一定延迟(毫秒级) ...
- [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存
sql server 统计出来的内存,不管是这个,还是dbcc memorystatus,和进程管理器中内存差距很大,差不多有70G的差异. 具体原因不止,可能是内存泄漏,目前只能通过重启服务解决 ...