merge:混合,融入;跟append一样,都是用来拼接集合的,两者不一样的是,拼接后,新集合的元素排序不同。
假设有3个集合:
第一个:{'one','two','three'}
第二个:{'four,'five','six'}
第三个:{'seven','eight','nine'}
1.append实例解析
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib prefix="s" uri="/struts-tags" %> <% 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%>"> --%> <title>struts2标签之append</title> </head> <body> <!-- append实例 --> <s:append id="newList"> <s:param value="{'one','two','three'}"/> <s:param value="{'four','five','six'}"/> <s:param value="{'seven','eight','nine'}"/> </s:append> <!-- iterator迭代输出 --> <s:iterator value="#newList" status="st"> <s:property/><br> </s:iterator> </body> </html>
根据输出结果,很明显看出集合元素顺序逻辑如下:
第一个集合中第一个元素
第一个集合中第二个元素
第一个集合中第三个元素
第二个集合中第一个元素
第二个集合中第二个元素
第二个集合中第三个元素
第三个集合中第一个元素
第三个集合中第二个元素
第三个集合中第三个元素
2.merge实例解析
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib prefix="s" uri="/struts-tags" %> <% 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%>"> --%> <title>struts2标签之merge</title> </head> <body> <!-- merge实例 --> <s:merge id="newList"> <s:param value="{'one','two','three'}"/> <s:param value="{'four','five','six'}"/> <s:param value="{'seven','eight','nine'}"/> </s:merge> <!-- iterator迭代输出 --> <s:iterator value="#newList" status="st"> <s:property/><br> </s:iterator> </body> </html>
输出结果:
one
four
seven
two
five
eight
three
six
nine
结合元素逻辑分析:
先看struts2的document解释:
Example if there are 3 lists being merged, each list have 3 entries, the following willbe the logic.
第一个集合中第一个元素
第二个集合中第一个元素
第三个集合中第一个元素
第一个集合中第二个元素
第二个集合中第二个元素
第三个集合中第二个元素
第一个集合中第三个元素
第二个集合中第三个元素
第三个集合中第三个元素
其实就是从第一集合开始,先取第一个集合第一个元素放在新集合中做为第一个,再去第二个集合中取第一个元素作为新集合第二个元素,一次类推,知道按这样的顺序将所有参加的集合取完。
到这个地方会有个疑问产生,如果每个集合长短不一样怎么办?
看这个例子就明白了!
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib prefix="s" uri="/struts-tags" %> <% 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%>"> --%> <title>struts2标签之merge</title> </head> <body> <!-- merge实例 --> <s:merge id="newList"> <s:param value="{'one','two','three','ten'}"/> <s:param value="{'four','five','six'}"/> <s:param value="{'seven','eight','nine','eleven'}"/> </s:merge> <!-- iterator迭代输出 --> <s:iterator value="#newList" status="st"> <s:property/><br> </s:iterator> </body> </html>
one
four
seven
two
five
eight
three
six
nine
ten
eleven
如上,第一个集合取到第四个元素ten的时候,第二个集合没有第四个元素,没有取到就没有呗,没有就混过去,然后去取第三个集合的eleven。
这个时候还有疑问,如果第一个集合中的ten没有,而第三个集合中的eleven存在,咱拼接啊!让事实证明一切!
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib prefix="s" uri="/struts-tags" %> <% 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%>"> --%> <title>struts2标签之merge</title> </head> <body> <!-- merge实例 --> <s:merge id="newList"> <s:param value="{'one','two','three'}"/> <s:param value="{'four','five','six'}"/> <s:param value="{'seven','eight','nine','eleven'}"/> </s:merge> <!-- iterator迭代输出 --> <s:iterator value="#newList" status="st"> <s:property/><br> </s:iterator> </body> </html>
one
four
seven
two
five
eight
three
six
nine
eleven
结合上面实例,一句话总结,按顺序,见者有份,不会把谁丢掉的!只有发现大家都拼接到了,才算结束!