首先加载标签库
<%@ taglib uri="/struts-tags" prefix="s" %>
一、数据标签
1、set
set标签赋予变量一个特定范围内的值. 当希望给一个变量赋一个复杂的表达式,每次访问该变量而不是复杂的表达式时用到.
其在两种情况下非常有用: 复杂的表达式很耗时 (性能提升) 或者很难理解 (代码可读性提高).
参数:
名称 | 必填 | 缺省 | 类型 | 描述 |
---|---|---|---|---|
name | true | String | 变量的名字 | |
scope | false | action | String | 变量作用域,可以为application, session, request, page, 或action |
value | false | Object/String | 将会赋给变量的值 | |
id | false | Object/String | 元素标识 |
action:
package com.zking.three;
import com.opensymphony.xwork2.ModelDriven;
import com.zking.one.entity.Cal;
public class TagAction implements ModelDriven<Cal> {
private Cal cal = new Cal();
private Cal cal2;
private String num1;
private String result;
public String execute() {
System.out.println(cal);
System.out.println(cal2);
System.out.println(num1);
return "success";
}
@Override
public Cal getModel() {
// TODO Auto-generated method stub
return cal;
}
public Cal getCal2() {
return cal2;
}
public void setCal2(Cal cal2) {
this.cal2 = cal2;
}
public String getNum1() {
return num1;
}
public void setNum1(String num1) {
this.num1 = num1;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
}
跳转:
<a href="${pageContext.request.contextPath }/sy/tagAction.action?num1=20&cal2.num1=90&result=250" >测试</a>
例子:
<h3>set</h3>
<!-- 在ognl上下文的根对象中取result的值,赋给test1,value的类型是表达式 -->
<s:set var="test1" value="result"></s:set>
${test1 },${requestScope.test1 }
2、property
得到’value’的属性,如果value没提供,默认为堆栈顶端的元素.
参数:
名称 | 必填 | 缺省 | 类型 | 描述 |
---|---|---|---|---|
default | false | String | 如果属性是null则显示的default值 | |
escape | false | true | Boolean | 是否escape HTML |
value | false | Object | value to be displayed | |
id | false | Object/String | 元素标识 |
例子:
<h3>property</h3>
<!-- 默认为堆栈顶端的元素. -->
<s:property />
<!-- 取根对象最上面的对象的属性 -->
<s:property value="num1" />
<!-- 取根对象的cal2对象的num1属性 -->
<s:property value="cal2.num1" />
<!-- 取非根对象的cal2对象的num1属性值 -->
<s:property value="#request.cal2.num1" />
3、push
push值到堆栈中,方便应用.
参数:
名称 | 必填 | 缺省 | 类型 | 描述 |
---|---|---|---|---|
value | true | Object /String | 要push到堆栈中的值 | |
id | false | Object/String | 元素标识 |
例子:
<h3>push</h3>
<!-- push就是将你需要的值放到栈顶,便于页面获取 -->
<s:property />
<s:push value="result">
<s:property />
</s:push>
<s:property />
4、action
通过指定命名空间和action名称,该标签允许你在jsp页面直接调用Action. 标签体用来渲染Action执行结果. 除非你设定了executeResult参数为true,否则你在xwork.xml中为该Action指定的Result Processor不会执行.
参数:
名称 | 必填 | 缺省 | 类型 | 描述 |
---|---|---|---|---|
id | false | String | 如果设定,将作为该Action在栈中的标识 | |
name | true | String | action名字(不包括后缀,如.action) | |
namespace | false | String | action所在命名空间 | |
executeResult | false | false | Boolean | Action的result是否需要被执行 |
ignoreContextParams | false | false | Boolean | request中的参数是否需要传入该Action |
例子:
<h3>action</h3>
<!-- action通常用来请求后台,获取初始化数据 -->
<s:action name="tagAction" namespace="/sy" var="test2" ></s:action>
<s:property value="#test2.cal2" />
5、url
该标签用于创建url,可以通过"param"标签提供request参数.
参数:
名称 | 必填 | 缺省 | 类型 | 描述 |
---|---|---|---|---|
includeParams | false | get | Object/String | 值为’none’, ‘get’ 或’all’. |
scheme | false | Object/String | scheme属性 | |
value | false | Object/String | value如果不提供就用当前action | |
action | false | Object/String | 用来生成url的action,如果没有则使用value | |
namespace | false | Object/String | 命名空间 | |
method | false | Object/String | 使用的action的方法 | |
encode | false | true | Boolean | 是否encode参数 |
includeContext | false | true | Boolean | 是否实际的上下文环境应该包含在url中 |
| portletMode | false| | Object/String| 结果portlet 的模式(mode)|
| windowState | false| | Object/String| 结果portlet窗口的状态|
| portletUrlType | false | | Object/String | 指定这时一个 portlet 输出还是一个 action url|
| anchor| false| | Object/String| URL的锚点( anchor)|
| id| false| | Object/String| 该元素标识|
例子:
<h3>url</h3>
<!-- url为了生成地址所用,注意与a标签区分 -->
<s:url namespace="/sy" action="tagAction" var="test3" ></s:url>
<%-- <s:property value="#test3" /> --%>
<a href=' <s:property value="#test3" /> ' ></a>
<s:a href="%{#test3}" ></s:a>
6、param
为其他标签提供参数,比如include标签和bean标签.
参数的name属性是可选的,如果提供,会调用Component的方法addParameter(String, Object),如果不提供,则外层嵌套标签必须实现UnnamedParametric接口(如TextTag).
该标签的两个属性
name (String) - 参数名
value (Object) - 参数值
注意 : value的提供有两种方式,通过value属性或者标签中间的text,不同之处
参数:
名称 | 必填 | 缺省 | 类型 | 描述 |
---|---|---|---|---|
name | false | String | 参数名 | |
value | false | 从stack中evaluated的值 | Object/String | value表达式 |
id | false | Object/String | 引用元素的id |
例子:
<h3>param</h3>
<!-- 两种赋值方式:ognl表达式和字符串 -->
<s:url namespace="/sy" action="tagAction" var="test4" >
<s:param name="test5" >aaa</s:param>
<s:param name="test6" value="num1" ></s:param>
</s:url>
<s:property value="#test4" />
7、date
例子:
<%
request.setAttribute("Date",new Date());
request.setAttribute("score",new Integer(70));
request.setAttribute("names",new String[]{"zs","ls","ww"});
%>
<s:date name="#request.Date" format="yyyy-mm-dd" />
8、debug
例子:
<s:debug/>
二、控制标签
1、iterator
例子:
<h3>iterator/if/elseif/else</h3>
<ul>
<s:iterator var="v" value="#request.names" >
<li>
<s:property value="#v" />
</li>
</s:iterator>
</ul>
2、 if / elseif / else
例子:
<s:if test="#request.score > 80">A</s:if>
<s:elseif test="#request.score > 60">B</s:elseif>
<s:else>C</s:else>
3、表单标签
name属性必须写,不然会报错
<s:form namespace="" action="" >
<s:textfield label="姓名" name="uname" />
<%-- <s:radio list="{'男','女'}" name="sex" value="'男'" label="性别" /> --%>
<s:radio list="#{1:'男',2:'女'}" name="sex" value="2" label="性别" />
<s:select list="#{1:'安全部',2:'公关部',3:'人事部'}" name="deptName" label="部门选择" />
<s:checkbox label="是否有女朋友" name="married" />
<s:checkboxlist label="爱好" name="hobby" list="#{1:'篮球',2:'音乐',3:'游戏'}"/>
<s:textarea label="个人简介" name="remark" />
<s:hidden name="xxx" value="" />
</s:form>
效果: