OGNL(Object Graph Navigation Language)表达式指的是value里面的内容
一、value="xxx",直接访问valueStack里面的内容
二、value="user.age",只有传了user.age的值,才会执行user的构造函数。想初始化demain model,可以自己new,也可以传参数值,但这时候需要保持空的构造方法。
三、value="hello.length( )",访问值栈中对象的普通方法
四、value="m( )",访问栈中的普通方法
五、访问静态方法:value="@com.xxx.xxx@s()" //第一个@后是类名,第二个@后是方法名
记得在struts.xml中设置:<constant name="struts.ognl.allowStaticMethodAccess" value="true">
六、访问普通类的构造方法:value="new com.xxx.xxx.User(8)"
七、访问集合:
1.访问LIst: value="users"
2.访问List中某个元素:value="users[1]"
3.访问List中元素某个属性的集合:value="users.{age}"
4.访问List中元素某个属性的集合中的特定值:value="users[0].age"
访问Set与List的前两个相同;
访问Map:
1.访问Map:value="dogMap"
2.访问Map中的某个元素:value="dogMap.dog101"
3.访问Map中的所有Key: value="dogMap.keys"
4.访问Map中的所有value: value="dogMap.values"
5.访问容器的大小: value="dogMap.size()"
八、投影(过滤)
1.value="users.{?#this.age==1}.{age}"
//users是一个list,{}表示过滤条件,?#表示过渡条件,^#表示开头,$#表示结尾,this表示循环过程中的当前对象
九、用[ ]访问其中的元素
eg. value="[0]"
表示访问栈里面的第几个元素。action元素一般情况下是置顶的,所以当[0]时表示的是
Struts-tags标签:
注意标签的属性有的是字符串,有的是OGNL表达式,所以要分清楚
一、常用的几个标签
a.property
1.取属性:<s:property value="username">
//property的value的类型为object,则会把value值解析为一个OGNL表达式
2.取值为字符串:<s:property value="'username'">
//取字符串username
3.设定默认值:<s:property value="admin" default=“管理员”>
//当admin不存在时,获取到默认值"管理员"
4.设定HTML:<s:property value="'<hr/>'" escape="false">
//默认escape为true,表示会把它解析为字符串。设false时,会把它看作HTMl标签
b.set
set标签在实际应用中,会在换名字时用到。
1.设定值(scope默认为request和ActionConText): <s:set var="adminName" value="userName">
//把adminName的值放入request、actionText中
//scope范围有五种:application,session,request,page,action
2.从request取值: <s:property value="#request.adminName">
3.从actionContext取值: <s:property value="#adminName">
4.设定范围:<s:set name="adminPassword" value="password" scope="page">
5.从相应范围取值: <%=pageContext.getAttribute("adminPassword")%>
6.设定var,范围为ActionContext:< s:set name="adminPassword" value="password" var="a"/>
7.使用#取值:<s:property value="#a">
8.从相应的范围取值: <s:property value="#session.adminPassword">
c.bean
定义bean,并使用param来设定新的属性值。
<s:bean>开始时会new一个对象,放在valueStack中; 当</s:bean>结束时,会释放valueStack中定义的。
要想在它结束后继续使用,就要把属性写到var里。
eg. <s:bean name="com.xxx.xxx.xxx">
<s:param name="name" value="da"></s:param></bean>
d.include(不经常用)
<s:set var="incPage" value="">
<s:include value="%{#incPage}">
// %{ 表示把它强制转换成OGNL表达式,
二、控件标签
1.<s:include test="">
//test中是一个逻辑表达式
2.iterator可以遍历collections、map、enumeration、iterator、array
<s:iterator value="{1,2,3}" status="" />
<s:property/>
<s:iterator value="{1,2,3}" status="" var="x">
<s:property value="#x.toUpperCase( )"/>
<s:iterator value="{1,2,3}" status="status">
<s:property value="#status.count">
<s:property value="#status.index">
//遍历list
<s:iterator value="#{1:'a',2:'b',3:'c'}">
//遍历map
三、UI标签
四、AJAX标签
五、$#%的区别
1.$ 用于i18n和struts配置文件中传参时用到
2.# 取得ActionContext的值
3.% 将原本的文本属性解析为ognl,对于本来就是ognl的属性不起作用