Struts2基础标签

来源:互联网 发布:macbook无法下载软件 编辑:程序博客网 时间:2024/06/05 15:02
1、Struts2基础标签
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时,默认范围是requestActionContext

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运行期间,beannew一个新对象压到栈顶,这时在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等对象。

0 0
原创粉丝点击