参考文章:http://blog.csdn.net/tjcyjd/article/details/6850203
http://blog.csdn.net/sd0902/article/details/8393099
1.#符号的用途一般有三种:
1)访问非根对象属性,例如示例中的#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext.getContext();;#session.msg表达式相当于ActionContext.getContext().getSession(). getAttribute(”msg”) 。
2)用于过滤和投影(projecting)集合,如示例中的persons.{?#this.age>20}。
3)用来构造Map,例如示例中的#{’foo1′:’bar1′, ’foo2′:’bar2′}。
名称 | 作用 | 例子 |
parameters | 包含当前HTTP请求参数的Map | #parameters.id[0]作用相当于 |
request | 包含当前HttpServletRequest的属性(attribute)的Map | #request.userName相当于 request.getAttribute("userName") |
session | 包含当前HttpSession的属性(attribute)的Map | #session.userName相当于 session.getAttribute("userName") |
application | 包含当前应用的ServletContext的属性(attribute)的Map | #application.userName相当于 application.getAttribute("userName") |
attr | 用于按request > session > application顺序访问其属性(attribute) |
获取Paraments对象的属性:<s:property value="#parameters.username"/>
OGNL中%的使用
用%{}可以取出存在值堆栈中的Action对象,直接调用它的方法.
例如你的Action如果继承了ActionSupport .那么在页面标签中,用%{getText('key')}的方式可以拿出国际化信息.
OGNL中$的使用
“$”有两个主要的用途
l 用于在国际化资源文件中,引用OGNL表达式
l 在Struts 2配置文件中,引用OGNL表达式
struts控制标签
1>if/elseif/else用来进行分支控制
<s:if test="表达式">标签体</s:if>
2>append:将多个集合对象拼接成一个新的集合
<s:append var="newList">
<s:param value="%{myList1}"></s:param>
<s:param value="%{myList2}"></s:param>
<s:param value="%{myList3}"></s:param> //数组取出方式:%{list}
</s:append>
<s:iterator value="%{#newList}"> //迭代数组取出:%{#list}
<s:property/>
</s:iterator>
3>generator:用来将指定字符串按照制定分隔符分割成多个子串
属性:separator--指定字符串的分隔符
val:制定被解析的字符串
var:将生成的Iterator设置为pageContext范围的属性
<s:generator separator="," val="%{'aaa,bbb,ccc,ddd,ee'}">
<s:iterator>
<s:property/>
</s:iterator>
</s:generator>
4>iterator:对集合数据进行迭代,根据集合条件遍历数组和集合类中的数据
属性:status--迭代过程中的状态(status.first:第一个元素;status.last:最后一个元素;status.even:索引是否为偶数;status.odd:索引是否为奇数;status.index:当前索引值)
step--每次迭代索引增加的值
value--迭代的数组或者集合对象
var--将生成的iterator设置为page范围的属性
<table border="1" cellpadding="0" cellspacing="0">
<s:iterator var="name" value="{'java','css','html','jquery'}" status="st">
<s:if test="st.odd"> status的状态信息
<tr style="background-color: red;">
<td><s:property value="name"/></td>
</tr>
</s:if>
<s:else>
<tr style="background-color: green">
<td><s:property value="name"/></td>
</tr>
</s:else>
</s:iterator>
</table>
5>sort:对指定集合进行排序,但是必须要指定一个Comparator,使其实现Java.util.Comparator接口
属性:source--指定的排序集合
var--将生成的iterator设置为page范围的属性
Comparator--指定进行排序实例
<!-- sort接口 -->
<s:bean var="myComparator" name="com.action.ListComparator"></s:bean>
<s:sort comparator="#myComparator" source="{'aaa','bb','ab'}" >
<s:iterator>
<s:property/>
</s:iterator>
</s:sort>
6>.subset:取出指定集合的子集
属性:source--指定源集合
decider--指定一个decider对象,该对象决定是否选择该元素(implements Decider)
<!-- subset标签 -->
<s:bean name="com.action.EvenDecider" var="mydecider"></s:bean>
<s:subset source="{1,2,3,4}" decider="#mydecider">
<s:iterator>
<s:property/>
</s:iterator>
</s:subset>
2.struts数据标签
1>.a标签(用于构造HTML页面中的超链接)
<s:a action/href/namespace/id/method></s:a>
2><s:action></s:action>从JSP页面来直接调用action,设置executeResult属性为true的话,可以直接得到action返回的视图页面
3><s:bean></s:bean>用于创建一个JavaBean实例
与param标签结合时可以传入指定属性值,因此指定JavaBean必须提供get和set方法
<s:bean name="com.model.User" var="user">
<s:param name="name" value="'tom'"></s:param>
<s:param name="age" value="20"></s:param>
<s:if test="#user.age>20">
<s:property/>
</s:if>
</s:bean>
4>.<s:date></date>标签用于输出日期
5><s:debug></s:debug>用于开发者在开发的过程中调试程序时输出更多的调试信息
6>.<s:include></s:include>标签用于将一个JSP页面包含到该页面中
7><s:param></param>标签主要用于为其他标签提供参数
8><s:property></s:property>输出valuestack中对象的属性值
9><s:set></set>将某个值放入指定范围之内 如session request等
<s:set var="personName" value="person.name"></s:set>
<s:property value="#personName"/>
10><s:text></s:text>输出国际化的资源文件
<s:textfield name="lastName" label="getText('person.lastName')"></s:textfield>
3.struts表单标签:
form:产生对应form标签
submit:产生提交按钮
checkbox:创建复选框
checkboxlist:一次性创建多个复选框
combox:创建文本框和下拉列表框的组合
doubleselect:创建两个相关联的列表框
file:用于创建一个文件选择框
label:用于生成HTML中的<label>标签
select:创建一个下拉列表框
outgroup:生成一个下拉列表框选项组
<!-- 下拉列表框选项组 -->
<s:select label="my select" name="mySelect"
list="%{#{'SUPERMAN':'Superman';'GOOD':good}}">
<s:optgroup label="Adult"
list="%{#{'Test':test;'BAD':bad}" />
<s:optgroup label="China"
list="%{#{'BUBEI':hubei;'BEIJING':beijing}" />
</s:select>
password:创建一个密码输入框
radio:创建多个单选框
<!-- 创建多个单选框 -->
<s:radio label="单选框" name="gender" list="#{'male':'男';'female':'女'}"
listKey="key" listValue="value"></s:radio>
<!-- 获取方式: -->
<s:property value="gender"/>
reset:重置按钮
textarea/textfield:创建文本框
updownload:可以上下移动的列表框