struts第3次课:struts标签

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") ;

猜你喜欢

转载自blog.csdn.net/weixin_43163062/article/details/83035612