- 浏览: 378942 次
- 性别:
- 来自: 北京
-
文章分类
最新评论
-
xujian19921202:
没有信用卡如何在iTunes注册帐号? -
sryijun:
虽然简单,但也明了,辛苦了
原创:oracle聚合函数介绍 <六> -
cnm493:
前台页面没有啊
原创:仿Baidu,Google查询分页技术JAVA实现 -
zczjdyj123:
读取页面,用字节流,再把字节数据转成特定编码字符,还是字节流好 ...
原创:ServletContext应用介绍总结 -
ljc19901124:
整合到一个参数 也报错,也没解决问题
public Ba ...
原创:Java反射java.lang.IllegalArgumentException: wrong number of arguments错误解析
Struts2的控制标签,主要用于完成流程控制,以及对ValueStack的控制。数据标签主要用于访问ValueStack中的数据;控制标签可以完成输出流程的控制,例如循环,分支等操作,也可以完成对集合的合并,排序等操作。
希望以上内容对学员学习struts2的控制标签有所帮助,以上内容属个人上课记录,如要转发请注明出处。愿你有所收获!
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!-- 引入struts2的标签库 --> <%@ taglib uri="/struts-tags" prefix="s"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> </head> <body> <h1> Struts2控制标签案例 </h1> <!-- <h3>OGNL中的集合操作</h3> <h5>OGNL直接生成List类型的集合</h5> 语法格式:{e1,e2,e3,e4,.......} 以上的语法中就直接生成了一个List类型的集合,该集合中包含的元素有:e1,e2,e3,e4, 如果需要更多的集合元素,则元素之间可以使用英文逗号分隔. <h5>OGNL直接生成Map类型的集合</h5> 语法格式:# {key:value,key1:value1,key2:value2,.....} 以上的语法中就直接生成了一个Map类型的集合,该Mapd对象中的每个key-value对象之间用英文的冒号隔开 ,多个元素之间用逗号分隔。 <h5>OGNL提供的对集合的操作符</h5> OGNL提供了两个元素符:in 和not in in代表的是:判断某个元素是否在指定的集合中 not in代表的是:某个元素是否不在指定的集合中 除此之外:OGNL还允许通过某个规则取得集合的子集。取得子集的操作符有: 1、? : 取出所有符合选择逻辑的元素 2、^ : 取出符合选择逻辑的第一个元素 3、$ : 取出符合选择逻辑的最后一个元素 <h4>控制标签</h4> Struts2的控制标签,主要用于完成流程控制,以及对ValueStack的控制。 数据标签主要用于访问ValueStack中的数据;控制标签可以完成输出流程的控制,例如循环,分支等操作 也可以完成对集合的合并,排序等操作。常见的控制标签有: if :用于控制选择输出的标签 elseif:与if标签结合使用,用于控制选择输出的标签 else :与if标签结合使用,用于控制选择输出的标签 iterator:是一个迭代器,用于将集合迭代输出 sort:用于对集合排序 append:用于将多个集合拼接成一个新的集合 generator:是一个字符串解析器,用于将一个字符串解析成一个新的集合 merge:用于将多个集合拼接成一个新的集合,但与append的拼接方式有所有不同 subset:用于截取集合的部分元素,形成一个新的集合 --> <h5> if/elseif/else标签 </h5> 这三个标签都是用于进行分支控制的,它们都是根据一个Boolean表达式的值,来决定是否计算、输出 标签体的内容 test:为boolean表达式 如果为真执行标签体 否则不执行 <s:set name="score" value="80"></s:set> <s:if test="%{#attr.score>60}"> 成绩及格了..... </s:if> <s:elseif test="%{#attr.score>35}"> 成绩实在是太烂了.... </s:elseif> <s:else> 成绩以及惨不忍睹....... </s:else> 上面的if/elseif/else标签组合使用与Java语言中的if/else if/else条件控制结构相似 <s:debug></s:debug> <h4> Iterator标签的使用 </h4> Iterator标签主要用于对集合进行迭代,这里的集合包含List、Set和数组,也可以对Map类型的对象 进行迭代输出 可以指定3个属性: value :这是一个可选属性,value属性指定的就是被迭代的集合,被迭代的集合通常 使用OGNL表达式指定。如果没有指定value属性,则使用ValueStack栈顶的集合 id:这是可选属性,该属性指定了集合里的元素的ID status:可选属性,该属性指定了迭代时的IteratorStatus实例,通过该实例即可以判定当前 迭代的元素的属性。 例如:是否是最后一个元素,以及当前迭代元素的索引等。 IteratorStatus实例包含以下几个方法: int getCount()返回当前迭代了几个元素 int getIndex();返回当前元素的索引 boolean isEven();返回当前迭代的索引是否是偶数 boolean isFirst();返回当前迭代的索引是否是第一个元素 boolean isLast();返回当前迭代的索引是否是最后一个元素 boolean isOdd();返回当前迭代的索引是否是奇数 var:当前迭代的元素 begin:开始的位置 end:结束的位置 step:跨度 <table border="1px" cellpadding="0" cellspacing="0"> <caption> 图书名称信息 </caption> <tr> <th> 图书的名称 </th> </tr> <s:iterator var="name" value="{'HTML入门','Java基础','CSS入门','JavaWeb实战'}" status="st"> <s:if test="#st.odd"> <tr style="background-color: red;"> <td> <s:property value="name" /> </td> </tr> </s:if> <s:else> <tr style="background-color: green;"> <td> <s:property value="name" /> </td> </tr> </s:else> </s:iterator> </table> 作业实现表格各行换色 <table border="1px" cellpadding="0" cellspacing="0"> <caption> 图书信息 </caption> <tr> <th> 图书的名称 </th> <th> 图书的作者 </th> </tr> <s:iterator var="name" value="#{'HTML入门':'redarmy','Java基础':'lihui','CSS入门':'baobao','JavaWeb实战':'yq'}"> <tr> <td> <s:property value="key" /> </td> <td> <s:property value="value" /> </td> </tr> </s:iterator> </table> <h5> append标签的使用 </h5> append标签用于将多个对象拼接起来,形成一个新的集合 <h5> List集合拼接 </h5> <s:append var="newList"> <s:param value="{'HTML入门','Java基础','CSS入门','JavaWeb实战'}"></s:param> <s:param value="{'HIbernate教程','Struts2教程'}"></s:param> </s:append> <table border="1px" cellpadding="1px" cellspacing="1px"> <caption> 图书信息2 </caption> <tr> <th> 图书名称 </th> </tr> <s:iterator value="#newList"> <tr> <td> <s:property /> </td> </tr> </s:iterator> </table> <h5> Map集合的拼接 </h5> <s:append var="newMap"> <s:param value="#{'HTML入门':'redarmy','Java基础':'baobao','CSS入门':'李慧','JavaWeb实战':'yq'}"></s:param> <s:param value="#{'HIbernate教程':'李刚','Struts2教程':'redarmy'}"></s:param> </s:append> <table border="1px" cellpadding="1px" cellspacing="1px"> <caption> 图书信息2 </caption> <tr> <th> 图书名称 </th> <th> 图书作者 </th> </tr> <s:iterator value="#newMap"> <tr> <td> <s:property value="key" /> </td> <td> <s:property value="value" /> </td> </tr> </s:iterator> </table> <h5> map List集合的拼接 </h5> <s:append var="newLM"> <s:param value="#{'HTML入门':'redarmy','Java基础':'baobao','CSS入门':'李慧','JavaWeb实战':'yq'}"></s:param> <!-- List方式要写成Map的形式 但没有value值 --> <s:param value="#{'HIbernate教程','Struts2教程'}"></s:param> </s:append> <table border="1px" cellpadding="1px" cellspacing="1px"> <caption> 图书信息2 </caption> <tr> <th> 图书名称 </th> <th> 图书作者 </th> </tr> <s:iterator value="#newLM"> <tr> <td> <s:property value="key" /> </td> <td> <s:property value="value" /> </td> </tr> </s:iterator> </table> <h5> merge标签 </h5> merge标签的用法看起来非常像append标签,但是有区别: <s:append var="ast"> <s:param value="{'html','css','ajax'}"></s:param> <s:param value="{'java','jsp','servlet'}"></s:param> <s:param value="{'struts2','mysql','hibernate'}"></s:param> </s:append> <s:merge var="mst"> <s:param value="{'html','css','ajax'}"></s:param> <s:param value="{'java','jsp','servlet'}"></s:param> <s:param value="{'struts2','mysql','hibernate'}"></s:param> </s:merge> <h3> append标签拼接 </h3> <s:iterator value="#ast"> <s:property /> </s:iterator> <h4> merge标签拼接 </h4> <s:iterator value="#mst"> <s:property /> </s:iterator> 以上看出:append标签的拼接方式是: 第1个集合中的第一个元素 第1个集合中的第二个元素 第1个集合中的第三个元素 第2个集合中的第一个元素 第2个集合中的第二个元素 第2个集合中的第三个元素 第3个集合中的第一个元素 第3个集合中的第二个元素 第3个集合中的第三个元素 merge标签的拼接方式是: 第1个集合中的第一个元素 第2个集合中的第一个元素 第3个集合中的第一个元素 第1个集合中的第二个元素 第2个集合中的第二个元素 第3个集合中的第二个元素 第1个集合中的第三个元素 第2个集合中的第三个元素 第3个集合中的第三个元素 <h5> generator标签 </h5> 将制定的字符串按指定的分隔符分隔成多个字串. count:可选属性,指定生成集合中元素的总数 separator:必填属性:指定解析字符串的分隔符 val:必填属性:指定解析字符串 converter:可选属性,转换器,该转换器负责将集合中的每个字符串转换成对象 id:可选属性,如果指明该属性则生成的集合放入到pageContext属性中 注释:generator分隔的字符串 ,如果在标签体内,整个临时生成的集合将位于ValueStack的顶端 .但标签结束时,被移出ValueStack。 <table border="1px"> <tr> <th> 名称 </th> </tr> <s:generator val="'this,is,a,doctor'" separator=","> <!-- 由于在generator标签体内,该集合位于ValueStack的栈顶 ,故此处迭代的就是临时生成的集合 --> <s:iterator var="bname"> <tr> <td> <s:property value="bname" /> </td> </tr> </s:iterator> </s:generator> </table> <!-- 通过id标识此解析的集合存入到pageContext中 --> <s:generator separator="," val="'this,is,a,man'" id="bks"></s:generator> <h1> 标签体外打印解析的字符串集合 </h1> <s:iterator value="#attr.bks"> <s:property /> </s:iterator> <h1> subset标签 </h1> subset标签用于取得集合的子集,该标签的底层通过:org.apache.struts2.uitl.SubsetIteratorFilte类提供实现 属性: count:可选属性:代表子集中的元素个数,如果没有指定代表源集合的全部元素 source:可选属性:指定源集合,如果没有指定代表是valueStack的栈顶集合 start:可选属性:从第几元素开始截取 decider:可选属性:指定由开发者自己决定是否选中该元素。 注意事项: 在subset标签内时,subset标签生成的子集位于valueStack的栈顶,如果标签结束,该标签生成的子集 将被移出valueStack栈。 <s:subset source="{'java','test','mybook','txs','lihui'}" start="1" count="3"> <!-- 由于在subset标签体内,该子集位于ValueStack的栈顶 ,故此处迭代的就是临时生成的集合 --> <s:iterator> <s:property /> </s:iterator> <!-- 注意1代表的是第二元素 --> </s:subset> <h5> 实现自己的Decider实例 </h5> <s:bean name="edu.dc.MyDecider" id="mydecider"></s:bean> <h6> 通过自己定义的Decider实例来截取目标集合,生成子集 </h6> <s:subset source="{'01Java入门','JSP入门','Servlet入门','02Java基础案例','基于Java的经典案例'}" decider="#mydecider"> <s:iterator> <s:property /> </s:iterator> </s:subset> <h1> sort标签 </h1> 用于对指定集合元素进行排序,进行排序时,必须提供自己的排序规则,即实现自己的 Comparator,自己的Comparator需要实现java.util.Comparator接口 属性: comparator:必填属性,指定进行排序的comparator的实例 source:可选属性:指定排序的集合,如果没有指定代表是valueStack的栈顶集合 备注: 在sort标签内时,sort标签生成的子集位于valueStack的栈顶,如果标签结束,该标签生成的子集 将被移出valueStack栈。 <s:bean var="mycomparator" name="edu.dc.MyComparator"></s:bean> <s:sort comparator="#mycomparator" source="{'JavaEE','css','JavaHTMl'}"> <s:iterator> <s:property /> </s:iterator> </s:sort> </body> </html> /**以上用到的Subset标签用到的bean类如下*/ package edu.dc; import org.apache.struts2.util.*; /** 自定定义Decider类,实现SubsetIteratorFilter.Decider */ public class MyDecider implements SubsetIteratorFilter.Decider { /** 实现Decider接口中的decide方法,该方法决定集合中的元素是否被选入到子集中 */ public boolean decide(Object arg0) throws Exception { System.out.println("----------------"); /** 把arg0造型为字符串 */ String str = (String) arg0; /** 如果集合中包含java 那么即可被选入到子集中 */ System.out.println("----------------" + (str.indexOf("Java") > 0)); return (str.indexOf("Java") > 0); } } /**以下是sort标签实例中用到的备案实例*/ package edu.dc; import java.util.Comparator; /** 需要实现Comparator接口 */ public class MyComparator implements Comparator<String> { /** * 如果该方法返回一个大于0的整数,则第一个元素大于第二元素,如果为0则相同 如果小于零,则第一个元素小于第二元素 */ public int compare(String o1, String o2) { /** 根据字符串的长度决定字符串的大小 */ return (o1.length() - o2.length()); } }
希望以上内容对学员学习struts2的控制标签有所帮助,以上内容属个人上课记录,如要转发请注明出处。愿你有所收获!
发表评论
-
原创:Struts2数据标签的解析
2010-12-13 17:32 1839数据标签主要用于提供各种数据访问相关的功能,比如显示一 ... -
SSH整合注意一点:
2010-06-06 20:23 1557最近又一次使用了SSH整合,但是在Spring注入的时候会所有 ... -
Infinite recursion detected:
2010-06-06 20:21 7325Infinite recursion detected: ... -
严重: IOException while loading persisted sessions: java.io.EOFException java.i
2010-06-06 14:47 2063严重: IOException while loading ... -
ssh整合延迟加载保错的解决办法
2010-06-05 12:05 1416我们在项目中一般都会使用Spring来管理Hibern ... -
org.springframework.dao.InvalidDataAccessApiUsageException
2010-06-05 12:00 2406org.springframework.dao.Inval ... -
java.lang.reflect.InvocationTargetException
2010-06-04 17:51 3006HTTP Status 500 - ----------- ... -
PermGen space
2010-06-04 17:48 1429一、PermGen space PermGen space的全 ... -
cascade与inverse的使用
2010-05-24 10:38 1364关于Hibernate中 cascade 与 inverse ... -
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer
2009-09-27 14:58 14204异常信息: java.lang.ClassCastExce ... -
Exception in thread "main" java.util.ConcurrentModificationException
2009-09-26 16:52 2466public void del(int id){ s ... -
org.hibernate.MappingException
2009-09-26 10:04 2491log4j:WARN No appenders could ... -
org.hibernate.hql.ast.QuerySyntaxException
2009-09-24 16:16 11324Exception in thread "mai ... -
myeclipse中导入.war文件
2009-09-16 11:04 10393在导入war文件之前首先 新建项目 比如:web ... -
Myeclipse中开发Struts2.0项目
2009-09-15 16:04 5795开发环境的搭建: 1:添加struts2.0 ja ... -
struts2.0全局跳转,局部跳转,全局异常..
2009-09-15 16:03 62152.struts2.0的全局跳转 &l ... -
struts2.0的处理流程
2009-09-15 15:57 1607一:回顾struts2.0的处理流程 ==>>&g ... -
Struts2.0中数据的传递
2009-09-15 15:50 2353Struts2.0中数据直接的传递:[align=center ... -
javax.servlet.ServletException: No getter method for property: "Tid" of bean: "Q
2009-09-10 12:37 1417异常信息: javax.servlet.ServletEx ... -
EA用例图
2009-09-09 11:48 4112包含关系用于将部分工 ...
相关推荐
### Struts2防止表单重复提交的技术解析 #### 一、引言 在Web应用程序开发过程中,表单重复提交是一个常见的问题,特别是在网络环境不稳定或用户误操作的情况下。这种重复提交不仅可能导致数据冗余,还可能引起事务...
**标签解析:** - "源码":这意味着内容可能包含实际的代码片段,供读者理解和复制,以帮助他们在自己的项目中实现相同的功能。 - "工具":可能指的是Struts框架作为一种工具,用于构建Web应用程序,并与...
- **Struts2TextAgainDetailExplanation**:Struts2是一个基于MVC设计模式的Web应用框架,可能包含Struts2的基础用法讲解。 - **JavabeanPro**:Javabean是Java对象模型,用于封装数据,可能有使用Javabean作为数据...
5. **第十二章 开发Struts 2+Spring应用.pdf**:结合Struts 2和Spring,讲述MVC(Model-View-Controller)架构的应用。 6. **第十一章 开发Spring+Struts+Hibernate应用.pdf**:这章可能介绍如何整合Spring、Struts...
《J2EE入门开发原创教程》是一份专为初学者准备的详细教程,由彭晨阳(J 道)撰写,旨在帮助读者快速搭建并理解J2EE开发环境,从而进行实际的项目开发。本教程的核心是使用JBoss 3.2.2作为应用服务器,配合MySQL 4.0...
2. **JSP语法**:掌握JSP的元素,如指令(Directives)、脚本元素(Scriptlets)、表达式(Expressions)、声明(Declarations)和动作(Actions)。 3. **JSP内置对象**:熟悉九大内置对象,包括request、response...
软件介绍 ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,遵循Apache2开源协议发布,是为了敏捷WEB应用 开发和简化企业级应用开发而...改进`case`标签解析 改进Url类对`url_convert`配置的支持
ThinkPHP借鉴了国外很多优秀的框架和模式,使用面向对象的开发结构和MVC模式,采用单一入口模式等,融合了Struts的 Action思想和JSP的TagLib(标签库)、RoR的ORM映射和ActiveRecord模式,封装了CURD和一些常用操作,...