struts标签
===============通用标签================
一, <s:property />标签的普通用法
index.jsp: <a href="<%=basePath%>tags.action?username=u&password=p">tags</a>
struts.xml:
<package name="tags" namespace="/" extends="struts-default">
<action name="tags" class="com.bjsxt.struts2.action.TagsAction">
<result>/result.jsp</result>
</action>
</package>
TagsAction.java:
private String username;
private String password; +setter/getter
@Override
public String execute() throws Exception {
return SUCCESS;
}
1. result.jsp:
property: <s:property value="username" /><br>
property 取值为字符串: <s:property value="'username'" /><br>
property 设定默认值: <s:property value="admin" default="管理员" /><br>
property 设定HTML(不解析): <s:property value="'<hr/>'" /><br>
property 设定HTML(解析, escape默认为true):
<s:property value="'<hr/>'" escape="false" /><br>
<s:debug />
测试:
二, <s:set/>标签: id, name, value, var, scope属性
id, name属性在struts2.1之后就过期了, 使用var设定属性, scope默认为action, 如果指定了自定义范围, 不管是
request还是session, 在取值的时候, 都要使用#request.var值或者#session.var值的形式取值, 如下:
set 设定adminName值(默认为request 和 ActionContext):
<s:set var="adminName" value="username"></s:set><br>
set 从request取值:<s:property value="#request.adminName" /><br>
set 从ActionContext取值: <s:property value="#adminName" /><br>
set 设定范围: <s:set name="adminPassword" value="password" scope="page" /><br>
set 从相应范围取值: <%=pageContext.getAttribute("adminPassword") %><br>
set 不用name属性(已经过时, struts2.0使用),设定var(struts2.1使用),范围为ActionContext:
<s:set var="adminPassword" value="password" scope="session" /><br>
set 使用#取值: <s:property value="#adminPassword" /><br><!-- 这样取不到值 -->
set 从相应范围取值: <s:property value="#session.adminPassword" /><br>
测试:
<s:set />标签的使用场景: 如果一个变量的名字特别长, 使用不方便, 可以使用set标签换个名字
三, <s:bean />标签
1. 往Stack Context中压入一个bean
<s:bean name="com.bjsxt.struts2.action.Dog" var="myDog"></s:bean>
2. <s:bean />标签会在Value Stack中放入一个bean对象, 当标签执行结束之后改变也会随着消失
1. 往Stack Context中压入一个bean
<s:bean name="com.bjsxt.struts2.action.Dog" var="myDog">
<br>
2. 给Dog中的name属性设定一个值:<s:param name="name" value="'Oudy'" /><br>
3. 取值: <s:property value="name" />
<s:debug />
</s:bean>
测试:
1. 往Stack Context中压入一个bean
<s:bean name="com.bjsxt.struts2.action.Dog" var="myDog">
<br>
2. 给Dog中的name属性设定一个值:<s:param name="name" value="'Oudy'" /><br>
3. 取值: <s:property value="name" />
</s:bean>
<s:debug />
测试:
要想在bean执行结束之后还想取出name的属性值, 做法:
1. 往Stack Context中压入一个bean
<s:bean name="com.bjsxt.struts2.action.Dog" var="myDog">
<br>
2. 给Dog中的name属性设定一个值:<s:param name="name" value="'Oudy-0'" /><br>
3. 取值: <s:property value="name" />
</s:bean>
<br>
4. bean执行结束之后取值:
<s:property value="#myDog.name" />
<s:debug />
测试:
四, <s:include />标签
include _include1.html 包含静态英文文件
<s:include value="/_include1.jsp" />
<s:include value="/_include2.jsp" />
<s:debug />
--------------------------------
_include1.jsp: <h3>This is Page _include1.jsp</h3>
_include2.jsp: <h3>This is Page _include2.jsp: 带中文</h3>
测试:
-----------------------------------------------
include _include1.html 包含静态英文文件,说明%用法
<s:set var="incPage" value="%{'/_include1.jsp'}" />
<s:include value="%{#incPage}" />
<s:debug />
说明: 加上%{}, 如果括号里面是OGNL表达式, 那么自动会把%{}去掉, 如果不是, 那么就会强制转成OGNL表达式
测试:
五, <s:fielderror />标签, 添加提示信息
action:
@Override
public String execute() throws Exception {
this.addFieldError("fielderror.test", "wrong!");
return SUCCESS;
}
jsp:
<s:fielderror name="fielderror.test" theme="simple" />
测试:
注: 但是struts2里面的这个标签会自带格式
===============控制标签================
1. if elseif else
2. iterator
collections map enumeration iterator array
subset
3. UI标签
一, if elseif else 标签
age = <s:property value="#parameters.age[0]" /><br>
<s:set var="age" value="#parameters.age[0]" />
<s:if test="#age < 0">wrong age !</s:if>
<s:elseif test="#age < 20">too young !</s:elseif>
<s:else>yeah !</s:else><br>
<!-- 判断有无某个参数 -->
<s:if test="#parameters.aaa == null">is null</s:if>
<s:debug />
测试:
二, iterator标签
遍历集合:
<s:iterator value="{1, 2, 3}">
<s:property/> |
</s:iterator>
<br>
自定义变量:
<s:iterator value="{'aaa', 'bbb', 'ccc'}">
<s:property/> |
</s:iterator>
<br>
定义别名:
<s:iterator value="{'aaa', 'bbb', 'ccc'}" var="temp">
<s:property value="#temp.toUpperCase()" /> |
</s:iterator>
<br>
使用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>
<br>
遍历Map集合:<br>
<s:iterator value="#{1: 'a', 2: 'b', 3: 'c'}">
<s:property value="key" /> | <s:property value="value" /><br>
</s:iterator>
<br>
遍历Map集合(定义别名):<br>
<s:iterator value="#{1: 'a', 2: 'b', 3: 'c'}" var="temp">
<s:property value="#temp.key" /> | <s:property value="#temp.value" /><br>
</s:iterator>
<s:debug />
测试:
三, UI标签, 不常用