1、用来输出值。
<s:property value="key" escape="true" default=""/>
value的值是OGNL表达式。如果没有设置value属性,则输出值栈栈顶对象default属性用于设置默认值,即未找到属性值时显示的值。
2、用来将某个变量及其值放入ActionContext中
<s:set var=“age" value="5" scope=“action”></s:set>
scope可取值有request,session,application,action,若未设置scope则放入ActionContext。
获取时要使用#。
<s:property value="#age" />
也可直接创建一个集合对象(List或Map),如下代码:
<s:set var="list" value="{'zhangsan','李四','王麻子'}" />
生成Map:
<s:set var="map" value="#{'z':'张三', 'l':'李四'}"/>
3、条件判断标签
<s:if><s:else>标签
<s:if test="age<20">
<s:if test="list.size()<2">
<s:if test="list==null || list.size()==0">
null
</s:if>
<s:else>
not null
</s:else>
注:test属性值中可使用and、or,也可使用&&、||。
4、<s:url>标签,用于辅助生成url字符串
<s:url var="linkName" action="productdAction" method="view">
<s:param name="prdId">2</s:param>
</s:url>
<s:a href="%{#linkName}">查看产品</s:a>
注:%{ }的使用,在表达式可能被看做字符串的情况下,使用%{}符号表明该字符串是OGNL表达式,%{ }只有在Struts标签中才生效。也可改用下述代码:
<a href='<s:property value="#linkName"/>'>test</a>
5、<s:iterator/>标签用来迭代输出集合。
该标签有3个属性:
value:指定被迭代的集合
var :指定引用当前元素变量名
status属性:指定引用IteratorStatus实例的变量名。
IteratorStatus实例中存在以下几个方法:
int getCount() 返回迭代计数
int getIndex() 返回当前元素索引
boolean isEven() 当前元素count是否偶数
boolean isFirst() 是否第一个元素
boolean isLast() 是否最后一个元素
boolean isOdd() 当前元素count是否奇数
【示例】
<s:iterator value="#list" var='v' status="st">
<s:if test="#st.even">
<s:property value="#st.count" />
</s:if>
当前元素值:<s:property value="#v" /> <br />
</s:iterator>
6、<s:date name=format=/>标签用来格式化日期对象为字符串name指定待格式化的日期指;format指定格式。
例如:
<s:date name="" format="yyyy-MM-dd HH:mm:ss" var="v" />
上面的所有示例
<!-- 引用字符串常量 必须加引号 -->
<s:property value="'my name is xixi'"/> <br/>
<!-- 将数字常量显示到jsp页面 -->
<s:property value="360" /> <br/>
<!-- 调用值栈中的Map对象 属性 -->
<s:property value="user.testString"/> <br/>
<!-- 调用值栈中的Map对象 方法 -->
<s:property value="user.getTestString()"/> <br/>
<!-- 调用类的静态方法 -->
<s:property value="@@floor(39.44)"/> <br/>
<!-- 不用将特殊的字符转为字符串的形式 -->
<s:property value="someValue" escape="false" /> <br/>
<!-- 按照原来的形式进行输出 ,将特殊殊的字符进行转换,转化为字符串-->
<s:property value="someValue" /> <br/>
<!-- 设置一个linkName的URL路径 -->
<s:url var="linkName" action="DefaultAction" method="view">
<s:param name="prdId">2</s:param>
</s:url>
<!-- struts 会将我的#linkName当做一个锚点,将#linkName的URL追加到当前的URL -->
<!-- http://localhost:8088/struts_demo/test.action#linkName-->
<a href="#linkName">linkName1</a><br/>
<!-- 生成正确的超链接地址 -->
<!-- http://localhost:8088/struts_demo/%%7B#linkName}-->
<a href='<s:property value="#linkName"/>'>linkName2</a><br/>
<!-- 在生成的url的变量前加上了%{}, 明确的告诉struts框架,我当前变量的值按照ognl表达式去解析,而不是锚点 -->
<!-- %{} 只在你期望将一个可能会被解析字符串url时,加上这才起作用,否则,无任何作用 -->
<!-- http://localhost:8088/struts_demo/DefaultAction!view.action?prdId=2 -->
<s:a href="%{#linkName}">linkName3</s:a><br/>
<!-- 在普通的a标签中使用%{}没有作用-->
<!-- http://localhost:8088/struts_demo/%%7B#linkName}-->
<a href="%{#linkName}">linkName4</a>
<!-- 定义一个列表 -->
<s:set var="myList" value="{'zzzz','sssss','ddddd','rrrrr','hhhhh'}"></s:set>
<ul>
<s:iterator value="#myList" var="str" status="sts">
<li><s:property value="#sts.count"/> :  <s:property value="#str"/></li>
</s:iterator>
</ul>
<!-- 输出日期的形式 -->
<!-- 17-12-29 -->
<s:property value="dob"/>
<s:date name="dob" format="yyyy/MM/dd HH:mm:ss" var="date"/>
<!-- 2017/12/29 12:42:38 -->
<s:property value="date"/>
7、【了解】Struts2 UI标签
<s:form action="login">
<s:textfield tooltip="name" label="姓名" name="userName" />
<s:password tooltip="password" label="密码" name="pwd"></s:password>
<s:textarea tooltip="content" label="备注" name="remark" cols="30"
rows="3" />
<s:file tooltip="Attachment" label="附件" name="photo" />
<s:a href="get.jsp">超链接</s:a>
<s:submit value="Login"></s:submit>
<s:reset value="reset"></s:reset>
</s:form>
各标签可使用的属性:
theme,cssStyle,cssClass,cssErrorClass,cssErrorStyle,name,value,......
使用了theme属性
<s:a href="get.jsp">超链接</s:a>
<s:form action="login" theme="simple">
<s:textfield tooltip="name" label="姓名" name="userName" />
<s:password tooltip="password" label="密码" name="pwd"></s:password>
<s:textarea tooltip="content" label="备注" name="remark" cols="30" rows="3" />
<s:file tooltip="Attachment" label="附件" name="photo" />
<s:submit value="Login"></s:submit>
<s:reset value="reset"></s:reset>
</s:form>
• UI标签或者Form标签的theme属性用来指定主题。
Struts2内建了3个主题,分别是simple, xhtml, css_xhtml。
simple 主题只会将UI标签转换为普通HTML元素,不会生成其它额外内容;
xhtml主题是Struts2的默认主题,它具有如下特性:
1、 UI控件使用标准的两列表格布局。
2、将label属性转换为<label>元素并和控件关联。
3、如果某控件校验未通过,自动显示校验错误信息。
• 使用Struts UI标签的优点:
1,自动根据Action中对应的实例变量显示表单控件的值。
2,自动显示校验错误消息,无需使用<s:fielderror/>标签。
• 单选按钮组件
<s:radio list="" listKey="key" listValue="value" name=""></s:radio>
list属性指明要迭代的集合;
listKey属性指明使用list中对象的哪个属性作为选项值;
listValue属性指明使用list中对象的哪个属性作为显示内容;
value属性控制哪个项目被选中;
注意:name属性是必须的。
• 下拉列表组件
<s:select list="" headerKey=“-1“ headerValue=”-请选择-" name=""
listKey="key" listValue="value"></s:select>
headerKey和headerValue指明第一项的value和内容;
value属性控制当前被选中项。
• 复选框组件
<s:checkboxlist list="" listKey="key” listValue="value" name="">
</s:checkboxlist>
示例程序:
Action类
package com.xixi.struts_demo.action;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.util.ValueStack;
import com.xixi.struts_demo.dto.MajorInfo;
public class DefaultAction extends BaseAction {
private Integer majorId;
private Integer[] majorIds;
private String myName = "兮兮";
public Integer getMajorId() {
return majorId;
}
public void setMajorId(Integer majorId) {
this.majorId = majorId;
}
public Integer[] getMajorIds() {
return majorIds;
}
public void setMajorIds(Integer[] majorIds) {
this.majorIds = majorIds;
}
public String getMyName() {
return myName;
}
@Override
public String execute() throws Exception {
ValueStack vs = ActionContext.getContext().getValueStack();
vs.set("myName", "周润发");
vs.set("user",new Object(){
public String getTestString(){
return "李四光";
}
});
vs.set("someValue", "<div style='color:red;'>你的名字</div>");
vs.set("dob", new Date());
List<MajorInfo> majorList = getMajorList();
super.add2ValueStack("majorList", majorList);
this.majorId = 102;
this.majorIds = new Integer[]{102,104,108};
return SUCCESS;
}
private List<MajorInfo> getMajorList() {
List<MajorInfo> list = new ArrayList<MajorInfo>();
for (int i = 0; i < 10; i++) {
list.add(new MajorInfo(100+i, "专业"+(100+i)));
}
return list;
}
}
jsp代码
<form action="" method="post">
<s:radio list="majorList" listKey="majorId" listValue="majorName" name="majorId"></s:radio><br/>
<s:select list="majorList" listKey="marjorId" listValue="majorName" name="majorId"
headerKey="0" headerValue="请选择你的专业"></s:select><br/>
<s:checkboxlist list="majorList" listKey="marjorId" listValue="majorName" name="majorIds"></s:checkboxlist><br/>
<input type="submit" value="提交"/>
</form>