天地不仁,以万物为刍狗!

转载 struts标签之logic手册

上一篇 / 下一篇  2007-06-01 00:00:00 / 个人分类:java

logic:iterate
7X(_2]n Ij5X0logic:iterate
标签用来迭代集合,您可以使用如下方式来为这个标签指定其要叠代的集合:ITPUB个人空间wr@$j@nDM
使用一个运行时表达式,这个表达式的值是一个集合。 name属性引用一个JSP Bean,这个JSP Bean本身就是一个集合。 name属性引用一个JSP Bean,这个JSP Bean的一个属性是一个集合,这时可以联合使用property来指定这个集合。 上面所提到的集合可以是:
6rS,lx`n0
对象类型或原子类型的数组(Array) ITPUB个人空间x2c E0O t"Fp
java.util.Collection
的实现,包括ArrayListVector
tE lj!|;\T0java.util.Enumeration
的实现。
4[ lqn o0java.util.Iterator
的实现。 ITPUB个人空间.[u?iI5YC$}'d4n
java.util.Map
的实现,包括HashMapHashtableTreeMap 如果您叠代的集合中含有null的值,这时需要采取一定的措施,因为这时logic:iterate不会在page作用域中创建对象。一般是使用<logic:present>标签或<logic:notPresent>标签来判断一下。
]#[ [a&XO0
下面是logic:iterate叠代ArrayList的示例的对象引用关系和部分代码:ITPUB个人空间4_"U&X*M(G2`~ES

|2{7l3M:Q;b4X vSP0
图示 3. logic:iterate中对象的引用关系ITPUB个人空间1RA!IJ2} h)d{S
图中的persons列表是在ListAction中填充的,在这里只是简单的加入了三个Person对象,在实际的应用中这些数据应该取自数据库。具体的代码如下:
GW"_}C;J0
/l4q*P2m"PK0public ActionForward execute(ActionMapping mapping,ActionForm form,ITPUB个人空间/D4@ RE%D:k6B*N5J
HttpServletRequest request, HttpServletResponse response) {
?qf(A E&^g/F/f0ITPUB个人空间 P+VR8J,LEm
ListForm listForm = (ListForm) form;ITPUB个人空间vC-A)e TZ

lJM\l,X!}?v~ cW0 List<Person> persons = new ArrayList<Person>();
0S^"z1J,F0
'i H ir }+U!b0 Person person1 = new Person();ITPUB个人空间 _ m j M i9lH
person1.setId("00001");
|;B#A,r-{%Re%Ab0 person1.setName("
赵辰");ITPUB个人空间G8w$],fpR#hEF

v/iD/\5m7V0 Person person2 = new Person();
Z,r4HUj!_*m)S0 person2.setId("00002");ITPUB个人空间:CKI F3sG0K
person2.setName("
李为芳");ITPUB个人空间r%ho%] |nuu+~xJ2]
ITPUB个人空间ZIp m |T(iX
Person person3 = new Person();ITPUB个人空间uUqXmf
person3.setId("00003");ITPUB个人空间K$V{4Z8dp
person3.setName("
王微");
luiN [0 ITPUB个人空间2q!gQ)Xx_
persons.add(person1);
:NjpUF"b1F0 persons.add(person2);
ll&F"U%a R0 persons.add(person3);
]#Fl%x n%LF;Uz0 ITPUB个人空间,G_.h1Z@"V4{
listForm.setPersons(persons);ITPUB个人空间{$J ?;omk%DD
ITPUB个人空间/d|L9E8ys%lt?&~
return mapping.findForward("success");ITPUB个人空间,D)S}3`:a/K'g1i%B(b
}ITPUB个人空间S A%QbGn$Fm"f
标签输出的结果为:
9|}Q4_.F:[ T9m0j0ITPUB个人空间rwOl#d$[H
00001-->
赵辰
r0MZ(Rz000002-->
李为芳
9j `3u2NF'W000003-->
王微
v%Lfe}&^0
回页首 ITPUB个人空间8O!S s B;{-T7q
logic:present
如果指定的值出现该标签就会创建其标签体内的内容。该标签用于以下情况:
3{&Ham(h[MwZE'I:|0
检查具有指定名称的cookie是否出现。 检查具有指定名称的header是否出现。 检查具有指定名称的JSP Bean是否出现 检查具有指定名称的JSP Bean中的property属性是否出现。 检查request中指定名称的参数是否出现。 检查当前的认证用户是否与指定的安全角色相关联。 检查当前认证的主体是否具有指定的名字。 下面的代码示例了logic:present标签检查具有指定名称User-Agentheader是否出现:ITPUB个人空间_6tn3f BR"k@]X
ITPUB个人空间/t5@(YD-R
<logic:present header="User-Agent">
a8bO rA%U.hc0
您的浏览器是<bean:header id="userAgent" name="User-Agent"/>ITPUB个人空间8ya`*}lh(zE
<bean:write name="userAgent"/>
<br/>ITPUB个人空间*f+[/cq$r
</logic:present>ITPUB个人空间 aq8dF}w@tr

#Oc$kH CX}0logic:notPresent
标签的应用正好和logic:present标签相反。ITPUB个人空间CI/|:`e-h.Q6M7z,?
回页首 ITPUB个人空间0}L*k,R\
logic:messagesPresent
#N#M_k.L0logic:messagesPresent
标签用于以下情况:ITPUB个人空间;{$|/g z Vf#Q,c
request作用域中存在一个ActionMessages对象,标签的property属性和ActionMessages中的property对应。 request作用域中存在一个ActionErrors对象,标签的property属性和ActionErrors中的property对应。 存在一个String对象,将其转换(构造)ActionMessage然后在添加到ActionMessages中。 存在一个String Array对象,将数组中的每一个String转换成一个ActionMessage,在将其添加到ActionMessages中。 标签的message属性值为true时将以Globals.MESSAGE_KEYkeyrequest作用域中查找Message,其它情况下,将name的值作为key查找,如果name 没有出现,默认值为Globals.ERROR_KEY ITPUB个人空间v^hb|H
下面的代码示例了logic:messagesPresent标签的典型用法:ITPUB个人空间.PpJaR/A-}
ITPUB个人空间M\+Xq,vF
<logic:messagesPresent>
4[p(L7|M1K_t!d0 <ul>ITPUB个人空间k,Jt.hW4R m3fU
<html:messages id="message">ITPUB个人空间,s0b%Y*j+ov
<li><bean:write name="message"/></li>ITPUB个人空间(k-h!E#y D#p[}
</html:messages>
/?1Zu.K"k`0 </ul>
[#A'E)m E3L0</logic:messagesPresent> ITPUB个人空间t$?$A`p.j}4~)jd
标签logic:messagesNotPresent的应用正好和logic:messagesPresent的应用相反。
;T+|dF(I`Ps0
回页首 ITPUB个人空间/G,p Z#EIB
logic:empty ITPUB个人空间] |W(]!Mj5M-|7|h]5W
logic:empty
标签是用来判断是否为空的。如果为空,该标签体中嵌入的内容就会被处理。该标签用于以下情况:
+_0pM-@ Nr[9t E0
Java对象为null String对象为"" java.util.Collection对象中的isEmpty()返回true java.util.Map对象中的isEmpty()返回true 下面的代码示例了logic:empty标签判断集合persons是否为空:
[w:w4O `i4K0ITPUB个人空间m([F1kg9uQS*h
<logic:empty name="listForm" property = "persons">ITPUB个人空间Lt3C6?:G |
<div>
集合persons为空!</div> ITPUB个人空间y0G i;T3Z G"^H#u
</logic:empty>
'd U:k\-W0
"}&uP(B!T,q!L6dS ]0logic:notEmpty
标签的应用正好和logic:empty标签相反。ITPUB个人空间$p`4u1]6{(Z
回页首
rw:kr2l!Kx0logic:match ITPUB个人空间 hv.uF'^&oD
logic:match
标签用来处理子串匹配问题。
:[ SWxO3KZH0
如果指定的值匹配该标签就会创建其标签体内的内容。该标签用于以下情况:
l2gC.o@$rgU1W0
检查具有指定名称的cookie是否与该标签的value匹配。 检查具有指定名称的header是否与该标签的value匹配。 检查具有指定名称的JSP Bean是否与该标签的value匹配 检查具有指定名称的JSP Bean中的property属性值是否与该标签的value匹配。 检查request中指定名称的参数值是否与该标签的value匹配。 ITPUB个人空间"?sIh0Z{ Xa'@1X
下面的代码示例了logic:match标签的典型用法:ITPUB个人空间^2`1w*w@
ITPUB个人空间!b9suO e1Fa
<logic:present header="User-Agent">ITPUB个人空间C\jw#RK-Q
<logic:match header="User-Agent" value="MSIE 6.0">ITPUB个人空间x~|(r,P |T
MS IE 6.0ITPUB个人空间I6s;XO s%D ?'m
</logic:match>
3ar t Ml/T9XC0</logic:present>
*QWFN8Y"hX8F/y`(^!q;u0ITPUB个人空间?~5Gy8{
logic:notMatch
标签的应用正好和logic:match标签相反。
.ZI? Q*a#l0
回页首
'}\8F@/WEy PT0logic:equal
这里要介绍的不只是logic:equal(=)标签,而是要介绍一类标签,这类标签完成比较运算,包括:ITPUB个人空间Bz3XV2P3LL%y

dn Gct r&q3E2O0logic:equal(=)
~(rr#BU R0logic:notEqual(!=)
R2h$c/@/~[0logic:greaterEqual(>=) ITPUB个人空间.F~)TkO.N[3_o
logic:lessEqual(<=) ITPUB个人空间S-WR1bZ e:F'G
logic:graterThan(>)
;z` RZT0logic:lessThan(<)
该类标签的用法类似,我们只介绍logic:equal标签,其它的留给您自己去完成。ITPUB个人空间$Xe!l0{/f7vh

]+W1X7G$~$l#yE [MK0logic:equal
是用来判断是否相等的。如果相等,该标签体中嵌入的内容就会被处理。该标签用于以下情况:ITPUB个人空间!c|&XZv r|!UB1_
比较由该标签的cookie属性指定的cookie的值是否与该标签的value属性值相等。 比较由该标签的header属性指定的header的值是否与该标签的value属性值相等。 比较由该标签的name属性指定的JSP Bean是否与该标签的value属性值相等(property属性不出现)或比较由该标签的name属性指定的JSP Bean中的property属性值是否与该标签的value属性值相等。 比较由该标签的parameter属性指定的参数值(request)是否与该标签的value属性值相等。 回页首 ITPUB个人空间9p"Y"jx2a7~\G
logic:forward
我觉得将forwardredirect这两个动作放到一起对比着介绍更加有利于理解,基于此原因也就将logic:forwardlogic:redirect这两个标签也拿到这里一起介绍了。
vuo[5C:y0
让我们看看这两个动作的区别: ITPUB个人空间y#z2gQ1S7}/m

-i6`l@8^0forward
是在servlet内部执行,浏览器完全不会感知到这个动作,原始的url也不会改变,浏览器重新装载的话也只是对原始的请求进行简单的重复。
0akr0n|!HO1c_r8R#N0redirect
则分成两个步骤:第一步是web应用程序告诉浏览器第二个url,然后浏览器向第二个url发送请求。 ITPUB个人空间1H/j$y#f S:@*w&K:As V
ITPUB个人空间"ej'Gms*f0P
redirect
forward慢,因为浏览器要做二次请求。还有就是要注意,在第一次的请求作用域(request作用域)内的bean对于第二次请求是不可见的。ITPUB个人空间AH1W$dD1S,M)F
理解了上面描述的区别也就知道了什么时候该选用logic:forward标签什么时候该选用logic:redirect标签了。logic:forward标签完成PageContext.forward()HttpServletResponse.sendRedirect(),如何选择由控制器决定。logic:redirect标签完成HttpServletResponse.sendRedirect()
:A$]J.D)C;BK/j'Wi0
在使用logic:redirect标签时我们可以向使用html:link一样构造baseurlquery参数。如果您感兴趣可以参考html:link标签。


1d5dG$N{0

TAG:

引用 删除 Guest   /   2008-04-29 14:48:01
1
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-07-26  
  12345
6789101112
13141516171819
20212223242526
2728293031  

数据统计

  • 访问量: 4857
  • 日志数: 257
  • 文件数: 2
  • 建立时间: 2007-12-01
  • 更新时间: 2008-07-25

RSS订阅

Open Toolbar