1、property
1 <s:property value="username" /> 一般访问,访问ValueStack中的第一个username
1 <s:property value="'username'"/> property取值为字符串,要显示字符串就加单引号
1 <s:property value="admin" default="管理员"/> 首先回去ValueStack中去找admin,没找到就默认显示管理员。
1 <s:property value="'<hr/>'" escape="true" /> 要在网页显示纯文本的 <hr/>,escape要设置成false,escape默认就是false,为true就不是纯文本。
2、set
1 <s:set var="adminName" value="username"/> set 设定adminName值(默认为request 和 ActionContext)
1 <s:property value="#request.adminName"/> 从request取值,但是如果在下面打一个 s:debug 在request中看不到adminName,原因可能是adminName还没来得及写入debug中,实际能获取到,那就是有;
1 <s:property value="#adminName"/> 从ActionContext取值
scope属性:application、session、request、page 和 action(默认)。
设置范围为page,并从page取值:
1 <s:set name="adminPassword" value="password" scope="page"/> 2 <%=pageContext.getAttribute("adminPassword") %>
不过上面的 name 属性在 2.1 以后已经过时了,一般用下面的方式:
1 <s:set var="adminPassword" value="password" scope="session"/>
scope 设定了哪个范围,就往哪个范围去取值就行了,尽管测试可以发现,有时候在其他范围有时也能拿到对应的值,但并不是最佳实践。
action范围: 1 <s:property value="#adminPassword"/>
request范围: 1 <s:property value="#request.adminPassword"/>
session范围: 1 <s:property value="#session.adminPassword"/>
application范围: 1 <s:property value="#application.adminPassword"/>
page范围: 1 <%=pageContext.getAttribute("adminPassword") %>
什么时候会用set标签:对变量进行重命名的时候,长名字换短名字、循环会用。
3、bean
1 <s:bean name="com.bjsxt.struts2.tags.Dog" var="mydog"> 2 <s:param name="name" value="'oudy'"></s:param> 3 </s:bean> 4 <s:property value="#mydog.name"/>
给属性赋值:name="类的属性"、value="'字符串'",value要赋值字符串要加单引号。
取值:new出的对象mydog存在于ActionContext中, <s:property value="#mydog.name"/> 就可取到。
4、include (2.1版本会有中文问题)
1 include _include1.html 包含静态英文文件 2 <s:include value="/_include1.html"></s:include> 3 4 5 include _include2.html 包含静态中文文件 6 <s:include value="/_include2.html"></s:include> 7 8 9 include _include1.html 包含静态英文文件,说明%用法 10 <s:set var="incPage" value="%{'/_include1.html'}"></s:set> 11 <s:include value="%{#incPage}"></s:include>
%{字符串},强制将字符串变为OGNL表达式,上一行的例子: %{#incPage} 。
5、fielderror
action 中设置 fielderror:
1 public String execute(){ 2 this.addFieldError("fielderror.test", "wrong"); 3 return SUCCESS; 4 }
页面取值:
1 <s:fielderror name="fielderror.test" theme="simple"/>
===================================================================================
Struts 2 控制标签
6、if elseif else
先发送一个请求:
取出第一个值:
<s:set var="age" value="#parameters.age[0]">
进行判断:
1 <s:if test="#age < 0">wrong age!</s:if> 2 <s:elseif test="#age < 20">to young!</s:elseif> 3 <s:else>yeah!</s:else>
如上图,显示结果为 too young!
判断单个值:
<s:if test="#parameters.aaa == null">null</s:if> 为空就显示null。
7、iterator 遍历集合
遍历简单集合:
1 <s:iterator value="{1,2,3}"> 2 <s:property /> | 3 </s:iterator>
OGNL 表达式中 {} 代表一个集合,遍历后的结果:
自定义变量:
1 <li>自定义变量:<br> 2 <s:iterator value="{'aaa','bbb','ccc'}" var="x"> 3 <s:property value="#x.toUpperCase()"/> | 4 </s:iterator> 5 </li>
使用status:
1 <s:iterator value="{'aaa','bbb','ccc'}" status="status"> 2 <s:property/> | 3 遍历过的元素总数:<s:property value="#status.count"/> 4 遍历过的元素索引:<s:property value="#status.index"/> 5 当前是偶数?:<s:property value="#status.even"/> 6 当前是奇数?:<s:property value="#status.odd"/> 7 是第一个元素吗?:<s:property value="#status.first"/> 8 是最后一个元素吗?:<s:property value="#status.last"/> 9 <br> 10 </s:iterator>
遍历map:
1 <li> 2 <s:iterator value="#{1:'a', 2:'b', 3:'c'}"> 3 <s:property value="key"/> | <s:property value="value"/><br> 4 </s:iterator> 5 </li> 6 <li> 7 <s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x"> 8 <s:property value="#x.key"/> | <s:property value="#x.value"/><br> 9 </s:iterator> 10 </li>
Struts 的 UI标签,一般开发都是有美工和前台开发人员先把页面做好,如果再让程序员把这些代码转为Struts2的UI标签会比较麻烦,所以UI标签用的不多。这里不做记录。
Struts2 标签例子链接: http://pan.baidu.com/s/1pKIPN6r 密码: 5ht5
Struts2 UI theme 相关示例:
链接1: http://pan.baidu.com/s/1o8tzDbk 密码: dn49
链接2: http://pan.baidu.com/s/1c12rnoO 密码: fn2k
链接3: http://pan.baidu.com/s/1dF5npO9 密码: wwxd
链接4: http://pan.baidu.com/s/1jHAS0QU 密码: ua4u