Struts2基础标签
来源:互联网 发布:macbook无法下载软件 编辑:程序博客网 时间:2024/06/05 15:02
1)输出
--value属性中写的是OGNL表达式
假设Action中有userName属性
<s:property value="userName"/>
2)循环
--value属性中写的是OGNL表达式,
该表达式访问的是Action中的集合属性。
<s:iterator value="costs">
<s:property value="name"/>
</s:iterator>
3)控制
--test属性中写的是OGNL表达式。
<s:if test="status==0">
</s:if>
<s:elseif test="status==1">
</s:elseif>
<s:else>
</s:else>
通用标签
1.property
<s: proterty value="username"/>取值
<s:property value="'username'"/>会直接输出字符串username
<s:property value="admin" default="管理员" />如果值栈中找不到admin则会输出字符串管理员
<s:property value="'<hr/>'" escape="true"/>默认为true,直接输出字符串<hr/>,改为false,则会输出一条分割线。
2.set
<s: set var="adminName" value="username">没有设置scope时,默认范围是request和ActionContext
从request取值:<s:property value="#request.adminName">
从ActionContext取值:<s:property value="#adminName">
<s:set var ="adminPassword" value="password" scope="page">设定范围
从相应范围取值<%=pageContext.getAttribute("adminPassword")%>
3.bean
<s:bean name="com.bjsxt.struts2.tag.Dog" var="myDog">
<s:param name="name" value="'oudy'"></s:param>
</s:bean>
相当于 Dog myDog = new Dog();
并且设置myDog中的name(String)属性值为oudy,为了不将value中的值(oudy)视为OGNL,必须加上一对单引号('oudy')
取值按照<s:property value="#mydog">即可
如果不使用var,注意在bean标签内,即bean运行期间,bean会new一个新对象压到栈顶,这时在bean标签内部使用<s:property value="name">即可取到Dog里的属性name的值,但是bean一旦运行完,即会从值栈中取走对象。
<s:bean name="com.bjsxt.struts2.tag.Dog" >
<s:param name="name" value="'oudy'"></s:param>
</s:bean>
如果在bean标签之外还想引用对象则应当使用var,这时对象会保留在ActionContext中
控制标签
1.if elseif else
<s:if test="#parameters.age[0]<0">Wrong Age!</s:if>
<s:elseif test="#parameters.age[0]>20">Too Young!</s:elseif>
<s:else>Yeah!</s:else>
2.iterator
<li>遍历集合:<br />
<s:iterator value="{1, 2, 3}" >
<s:property/> |
</s:iterator>
</li>
<li>自定义变量:<br />
<s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x">
<s:property value="#x.toUpperCase()"/> |
</s:iterator>
</li>
<li>使用status:<br />
<s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">
<s:property/> |
遍历过的元素总数:<s:property value="#status.count"/> |
遍历过的元素索引:<s:property value="#status.index"/> |
当前是偶数?:<s:property value="#status.even"/> |
当前是奇数?:<s:property value="#status.odd"/> |
是第一个元素吗?:<s:property value="#status.first"/> |
是最后一个元素吗?:<s:property value="#status.last"/>
<br />
</s:iterator>
</li>
<li>
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" > //定义Map必须使用#号
<s:property value="key"/> | <s:property value="value"/> <br />
</s:iterator>
</li>
<li>
<s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x">
<s:property value="#x.key"/> | <s:property value="#x.value"/> <br />
</s:iterator>
</li>
2、OGNL表达式
1、什么是OGNL表达式:
Object Graph Navigator Language,
它是一种功能强大的表达式语言,类似于EL。
2、EL表达式、OGNL表达式,其作用都是让我们写
页面的代码简洁,允许我们写一个满足规则的字符串,
表达式引擎会解析这个字符串,帮助我们访问java
对象,从中取值。
3、OGNL表达式,它将被Struts2在后台解析其标签的
的时候加载,Struts2会将OGNL传递给OGNL引擎
(Java类),该引擎会根据表达式字符串的写法,
访问不同区域的对象,分为2种:
root(根对象):Struts2指定根对象为Action,那么
我们访问这个根对象时,OGNL可以直接从它的
内部属性写起,而不需要从根写起。
比如Action中有属性User user,OGNL写法
user.name
context(上下文,Map类型):这里封装的是程序的
上下文对象,我们可以通过OGNL表达式访问,
访问的语法#name,其中name是该对象的key。
3、*ValueStack对象
1)ValueStack是Struts2中的一个核心组件
2)内部对OGNL进行了封装,我们标签中写的
OGNL表达式都是通过ValueStack来进行解析的。
3)*ValueStack结构如下:
--OGNL解析引擎
--Stack:在创建ValueStack时,就创建了这个Stack,
然后将Action实例化并放入栈顶。OGNL表达式
如果没写#将默认访问Stack,访问顺序是从
栈顶开始,依次向下进行访问,直到找到结果
返回,如果没找到则返回空。
--Context:在创建ValueStack时,就创建了这个
Context,它是Map类型的,然后Struts2将应用
上下文放入此对象中,有request,session,
application等。
4)*通常情况下,栈顶为Action。当循环时,栈顶
发生变化,不再是Action,而是每次循环的循环
变量。
--第一次循环时,将循环变量压入栈顶,导致
Action变成栈的第二个位置。
--第n次循环时,将n-1次循环变量从栈顶移除,
同时将本次循环变量放入栈顶,此时Action
依然处于栈的第二位。
--最后一次循环结束时,将循环变量从栈顶移除,
Action重新位于栈顶。
5)总结:
--通常情况,栈顶是Action,我们以Action为root
对象来写OGNL表达式,直接写Action里的属性
名即可。
--循环时,栈顶是循环变量,我们以循环变量为
root对象来写OGNL表达式,写循环变量里的
属性名。
--如果需要从context对象中取值,则OGNL表达式
以#开头,context对象中有request,session,
application,action等对象。
- Struts2基础标签
- struts2 tag 标签应用基础
- struts2基础标签属性详解
- 【struts基础】Struts2常用标签总结
- Struts2数据封装、拦截器、标签基础
- Struts2基础之十二:Struts2标签总结、实例
- struts2标签
- struts2标签
- struts2标签
- Struts2 标签
- struts2标签
- struts2标签
- struts2 标签
- Struts2 标签
- Struts2标签
- struts2 标签
- Struts2标签
- struts2标签
- Three.js示例简介(持续更新)
- boost.timer
- 枚举类型enum
- wiplus项目日志
- JavaScript学习笔记 第四记
- Struts2基础标签
- 指针,static,const,引用,violate等等
- QuartusII添加IP核
- Mysql数据库int(1)和tinyint(1)的区别&&扩展阅读(转)
- loadrunner 支持自定义函数
- C/C++中extern关键字详解
- 1006
- spring技术内幕10-Web环境中Spring启动过程
- BLE概念,profile,service,characteristic, UUID