PS:使用标签,需要引入Struts2核心jar包,在jsp头部,加入<%@ taglib uri="/struts-tags" prefix=“s” %>
一、通用标签
·
1、数据标签
①、property(用于打印所需要的内容)
id:可选属性,指定该元素的标识。
default:可选属性,如果要输出的属性值为null,则显示default属性的指定值。
escape:可选属性,指定是否忽略HTML代码。
value:可选属性,指定需要输出的属性值,如果没有指定该属性,则默认输出ValueStack栈顶的值
<!-- 取栈顶,取cal1(model) -->
<s:property/>,
<!-- 取跟对象最上面的对象的属性 值-->
<s:property value = "num1"/>,
<!-- 取跟对象的cal2对象的num1属性值 -->
<s:property value = "cal2.num1"/>,
<!-- 取【非】跟对象cal2对象的num1属性值 -->
<s:property value = "#request.cal2.num1"/>
<%-- ========================================课外学习======================================= --%>
<%--使用struts2的超链接标签发送请求:
<s:a>连接内容</s:a>
属性:
href:指定url路径
action:请求的动作名称(类名)
namespace:动作名称所在的名称空间
id:指定id
method:指定Action调用方法
--%>
<s:a action="addUIUser" namespace="/user">添加用户</s:a>
<s:a action="editUIUser" namespace="/user"> 编辑用户
<s:param name="userid" value="%{'1'}"></s:param>
</s:a>
<a href="${pageContext.request.contextPath}/user/editUIUser.action?userid=1">原始超链接标签-编辑用户</a>
·
②、set
在ognl上下文的对象中获取result值【一个表达式】,并赋值给test1
赋值代码:
<h1>struts2第3节课:ognl的通用标签</h1>
<a href = "${pageContext.request.contextPath }/sy/tagAction.action?num1=20&cal2.num1=99&result=250 ">测试9</a>
打印代码:
<s:set var="test1" value = "result"></s:set>
③、push
将所需要的值放到栈顶,便于页面获取
<s:property/><!-- 打印栈顶原有的值 -->
<s:push value="result"><!-- 将需要的值赋给栈顶 -->
<s:property/><!-- 保存赋值后的栈顶值 -->
</s:push>
<s:property/><!-- 还原原有栈顶 -->
④、action
通常用来请求后台,获取初始化数据
<s:action name="tagAction" namespace="/sy" var="test2">
</s:action>
<s:property value = "#test2.cal2.num1"/>
⑤、url
url标签是为了生成地址所用,注意与a标签区分
<s:url namespace="/sy" action="tagAction" var = "test3"></s:url>
<s:property value = "#test3"/>
<a href = '<s:property value = "#test3"/>'>aaa</a>
<s:a href = "%{#test3}">bbb</s:a>
<%-- ========================================课外学习======================================= --%>
<%-- url标签
作用:用于存放一个路径
属性:
action:动作名称
namespace:名称空间
var:取值是一个普通字符串。他会把action和namespace组成一个url作为value,把var的取值作为一个key,存入contextMap中
--%>
<s:url action="addUIUser" namespace="/user" var="myurl"/>
<a href="<s:property value='#myurl'/>">添加用户——url</a>
⑥、param
修改页面,两种赋值方式:①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"/>
⑦、date
获取时间
<%
request.setAttribute("currentDate",new Date());
request.setAttribute("score", new Integer(70));
request.setAttribute("names", new String[]{"aa","bb","cc","dd"});
%>
<s:date name="#request.currentDate" format="yyyy-MM-dd"/>
<%-- ========================================课外学习======================================= --%>
<%--s:date标签的使用:
它是用于格式化输出日期
name属性:取值是一个ognl表达式,表示要格式化的日期对象
format属性:指定格式
var属性:取值是一个普通的字符串。
把格式化好的日期字符串作为value,把var的取值作为key。存入contextMap中
--%>
<% request.setAttribute("myDate",new Date());
/* SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
String date = format.format(new Date());
out.println(date); */
%>
${requestScope.myDate}<br/>
<s:property value="#request.myDate"/>
<s:date name="#request.myDate" format="yyyy年MM月dd日" var="sdate"/>
<br>
格式化后的日期:<s:property value="#sdate"/>
<br/>
${sdate}
⑧、debug
debug标签用于调试Struts2,使用它会在页面中生成一个debug标签,点击后会显示服务器各种对象信息,包括值栈、ContextMap等。
2、控制标签 (iterator/if/elseif/else)
·
①、iterator遍历打印
<ul>
<s:iterator var = "v" value = "#request.names">
<li>
<s:property value="#v"/>
</li>
</s:iterator>
</ul>
<%-- ========================================课外学习======================================= --%>
<s:iterator value="customers">
<%--s:iterator是struts2的一个迭代标签,它的value属性取值是一个OGNL表达式
var属性:它的取值就是一个普通的字符串.
用了var:把每次遍历的对象作为value,把var的值作为key,存入ContextMap中
没用var:把每次遍历的对象压入栈顶,再下次遍历之前弹栈(从栈顶移走)。
begin:开始遍历的索引
end:遍历的结束索引
step:遍历的步长。
status:计数器对象
count 已经遍历的集合元素个数
index 当前遍历元素的索引值
odd 是否奇数行
even 是否偶数行
first 是否第一行
last 是否最后一行
--%>
<TR style="FONT-WEIGHT: normal; FONT-STYLE: normal; BACKGROUND-COLOR: white; TEXT-DECORATION: none">
<TD><s:property value="custName"/></TD>
<TD><s:property value="custLevel"/></TD>
<TD><s:property value="custSource"/></TD>
<TD><s:property value="custIndustry"/</TD>
<TD><s:property value="custAddress"/></TD>
<TD><s:property value="custPhone"/></TD>
</TR>
</s:iterator>
·
②、条件判断
<s:if test="#request.score > 80">a</s:if>
<s:if test="#request.score > 60">b</s:if>
<s:if test="#request.score < 60">c</s:if>
二、UI标签
·
①表单标签
<s:form>
<%-- 文本框 --%>
<s:textfield label="姓名" name = "uanme"></s:textfield>
<%-- 单选框 --%>
<%-- <s:radio list="{'男','女'}" label="性别" name = "usex" value = "'男'"></s:radio> --%>
<s:radio list="#{1:'男',2:'女'}" label="性别" name = "usex" value = "2"></s:radio>
<%-- 下拉框 --%>
<s:select label="部门选择" name = "deptname" list="#{1:'人事部',2:'财务部',3:'销售部',4:'计划部' }"></s:select>
<!-- 复选框 往后台传值是boolean类型 -->
<s:checkbox label="是否成年" name = "married"></s:checkbox>
<s:checkboxlist label="爱好" name ="hobby" list="#{1:'吃饭',2:'睡觉',3:'打豆豆',4:'听歌' }"></s:checkboxlist>
<%-- 文本域 --%>
<s:textarea label="简介" name = "remark"></s:textarea>
<%-- 隐藏域 --%>
<s:hidden value = "" name ="哈哈" ></s:hidden>
</s:form>
<%-- ========================================课外学习============================================ --%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册界面</title>
</head>
<body>
<s:form action="register" namespace="">
<s:textfield name="username" label="用户名" key="Switch"/>
<s:password name="password" label="密码"/>
<s:radio name="gender" list="#{'0':'男','1':'女'}" label="性别" value="0" />
<s:textfield name="age" label="年龄"/>
<s:select name="city" list="#{'bj':'北京','sh':'上海','gz':'广州','sz':'深圳'}" label="城市" headerKey="-1" headerValue="---请选择城市---" emptyOption="true"/>
<s:checkboxlist name="hibbies" list="#{'code':'写代码','algorithm':'算法','movie':'电影'}" label="爱好"/>
<s:checkbox name="married" label="是否已婚" value="true" labelposition="left"/>
<s:textarea name="description" label="自我介绍" rows="5" cols="20"/>
<s:file name="phone" label="头像"/>
<s:submit value="提交"/>
<s:reset value="重置"/>
</s:form>
</body>
</html>
②非表单标签
三、标签的属性类型说明
· ①String 字符串
② Boolean true|false
③Object
④ Object/String 传过去字符串,但会被认为是一个OGNL表达式进行计算
⑤ %{str}:str会被强制转换成OGNL表达式计算
<s:a href="%{#url1}">bbb</s:a>
四、标签的公共属性
var 将值保存到上下文(ActionContext)中的一个key
五、课后学习
·
**1、%{ } %{# }详解**
①#、%{}、%{#}的作用:
<1>#可以取出堆栈上下文中的存放的对象;
<2>%{}可以取出存在值堆栈中的Action对象;
<3>%{#},是Struts2为其解决兼容性问题而写成%{#}的,和%{}没什么太大的区别
②使用#、%{}、%{#}
在域对象中使用%{#} :比如%{#session.user.userName} ,将获得user对象的 userName属性值;
%{}强调的是从你设定的root点取值;
%{}用于计算表达式: 如%{10+20}结果将输出30 ,%{"a"+"b"}结果将输出"ab" ;
%{#}仍然用于计算表达式,只不过操作元可以是变量 :如<s:set name="age" value="%{25}"/> ,则%{#age}将输出25,也可以省略"#",写为%{age} , 若将age加10,可这么写: %{#age+10},将输出30,不能省略"#",也就说变量用于计算时不能省略"#";
#通常强调从上下文取 : 如#parameters.name[0]等价request.getParameter("name") 、#session.name等价于session.getAttribute("name") 、#request.name等价于request.getAttribute("name") ;