1),empty
logic:empty标签是用来判断是否为空的。如果为空,该标签体中嵌入的内容就会被处理。该标签用于以下情况:
当Java对象为null时
当String对象为""时
当java.util.Collection对象中的isEmpty()返回true时
当java.util.Map对象中的isEmpty()返回true时
下面的代码示例了logic:empty标签判断集合persons是否为空:
<logic:empty name="listForm" property = "persons">
</logic:empty>
logic:notEmpty标签的应用正好和logic:empty标签相反。
2),equal
equal检查给定的属性(或扩展属性)是否等于一个给定值。如果是这样的话,equal标签的标签体便会被执行。
notEqual是equal的逆命题。
1. 使用限制
value属性是必需的。
2. 属性
base-attrs和exprop-attrs属性集都是接受的。还有一个额外的value属性,它是属性或扩展属性将要与之比较的一个常数值。
以下例子展示了,如果变量var1等于“Joe”,”logic:equal”标签将会处理嵌套的”bean:write”标签。
<logic:equal name="var1" value="joe">
</logic:equal>
下一个例子说明parameter属性的使用。
<logic:equal parameter="userName" value="tom">
</logic:equal>
标签体部分只有在请求URL中具有一个值为tom的名为userName的参数才会被执行。如果有不只一个这样的参数,URL上第一个遇到的参数将被使用。
还可以使用scope变量来指定在其中查找一个bean的作用域。
<logic:equal name="MyBean" property="userId" scope="session" value="tom">
</logic:equal>
3)forward
我觉得将forward和redirect这两个动作放到一起对比着介绍更加有利于理解,基于此原因也就将logic:forward和logic:redirect这两个标签也拿到这里一起介绍了。
redirect则分成两个步骤:第一步是web应用程序告诉浏览器第二个url,然后浏览器向第二个url发送请求。
redirect比forward慢,因为浏览器要做二次请求。还有就是要注意,在第一次的请求作用域(request作用域)内的bean对于第二次请求是不可见的。
理解了上面描述的区别也就知道了什么时候该选用logic:forward标签什么时候该选用logic:redirect标签了。logic:forward标签完成PageContext.forward()或HttpServletResponse.sendRedirect(),如何选择由控制器决定。logic:redirect标签完成HttpServletResponse.sendRedirect()。
例子:
<logic:forward name="welcome"/>
welcome 是配置在struts里面的全局转发变量,大致这样
<global-forwards>
<forward name="welcome" path="/welcome.jsp">
</global-forwards>
在使用logic:redirect标签时我们可以向使用html:link一样构造baseurl和query参数。如果您感兴趣可以参考html:link标签。
4)greaterEqual
greaterEqual是一个有条件标签,只有在给定的属性(或扩展属性)大于或等于由value属性给出的常数值的时候,其标签体才会被执行。本组中的其他标签也是类似定义的。
注意,如果值不是一个数值,它会被解释为一个字符串,并且会执行字符串之间的比较(使用Java的标准字符串比较)。
1. 使用限制
value属性是必需的。
2. 属性
base-attrs和exprop-attrs属性集都是接受的。还有一个额外的value属性,它是属性或扩展属性将要与之比较的一个常数值。
3. 示例
下面的例子展示了使用”logic:greaterThan”标签来在变量maxId大于或等于10的时候处理嵌套的标签(没有具体展示出来)。
<logic:greaterEqual name="maxId" value="10">
//....
</logic:greaterEqual>
再说明下cookie属性的使用。
<logic:greaterEqual cookie="use_num" name="maxId" value="10">
//....
</logic:greaterEqual>
只有当称做use_num的cookie大于等于10的时候才会执行 //....
5)greaterThan
意为:大于
属性等定义,请参考 greaterEqual 标签说明
示例:
<logic:greaterThan name="maxId" value="10">
//....
</logic:greaterThan>
再说明下cookie属性的使用。
<logic:greaterThan cookie="use_num" name="maxId" value="10">
//....
</logic:greaterThan>
6)iterate
id 脚本变量的名称,它保存着集合中当前元素的句柄。
name 代表了你需要叠代的集合,来自session或者request的属性。
type 是其中的集合类元素的类型
bean的write标记是用来将属性输出的,name用来匹配iterate的id,property用来匹配相应类的属性<logic:iterate>用法详解22007-04-04 20:34<login:iterate>标记用于在页面中创建一个循环,以此来遍历如数组、Collection、Map这样的对象。该标记的功能强大,在Struts应用的页面中经常使用到。
1、对数组进行循环遍历
使用<logic:iterate>标记可以用于遍历数组,以下是一段示例代码:
程序代码
在上面的代码中,首先定义了一个字符串数组,并为其初始化。接着,将该数组存入pageContext对象中,命名为test1。然后使用<logic:iterate>标记的name属性指定了该数组,并使用id来引用它,同时使用<bean:write>标记来将其显示出来。其结果为:
另外,还可以通过length属性来指定输出元素的个数。如下面的代码:
程序代码
其中length属性指定了输出元素的个数,offset属性指定了从第几个元素开始输出,如此处为1,则表示从第二个元素开始输出。所以该代码的运行结果应当输出:
另外,该标记还有一个indexId属性,它指定一个变量存放当前集合中正被访问的元素的序号,如:
程序代码
其显示结果为:
2、对HashMap进行循环遍历
在bean:write中通过property的key和value分别获得HaspMap对象的键和值。其显示结果为:
由结果可看出,它并未按添加的顺序将其显示出来。这是因为HaspMap是无序存放的。
3、嵌套遍历
运行效果:
7)lessEqual
意为:小于等于
属性等定义,请参考 greaterEqual 标签说明
示例:
<logic:lessEqual name="maxId" value="10">
//....
</logic:lessEqual>
再说明下cookie属性的使用。
<logic:lessEqual cookie="use_num" name="maxId" value="10">
//....
</logic:lessEqual>
8)lessThan
意为:小于
属性等定义,请参考 greaterEqual 标签说明
示例:
<logic:lessThan name="maxId" value="10">
//....
</logic:lessThan>
再说明下cookie属性的使用。
<logic:lessThan cookie="use_num" name="maxId" value="10">
//....
</logic:lessThan>
9)match
logic:match标签用来处理子串匹配问题。
match标签将在一个在给定属性(或扩展属性)包含作为一个子串的value属性的时候执行其标签体的条件处理标签。notMatch是match的逆命题。
1. 使用限制
value属性是必需的。
2. 属性
base-attrs和exprop-attrs属性集都是可接受的,并且具有它们的通常意义。除这些之外,还有两个额外的属性:
3. 示例
下面是查找一个具有.cn后缀的电子邮件地址的简单例子:
也可以询问HTTP请求头:
<logic:present header="User-Agent">
</logic:present>
logic:notMatch标签的应用正好和logic:match标签相反。
10)present
如果指定的值出现该标签就会创建其标签体内的内容。该标签用于以下情况:
检查具有指定名称的cookie是否出现。
检查具有指定名称的header是否出现。
检查具有指定名称的JSP Bean是否出现 或 检查具有指定名称的JSP Bean中的property属性是否出现。
检查request中指定名称的参数是否出现。
检查当前的认证用户是否与指定的安全角色相关联。
检查当前认证的主体是否具有指定的名字。
下面的代码示例了logic:present标签检查具有指定名称User-Agent的header是否出现:
<logic:present header="User-Agent">
</logic:present>
检查某个对象是否存在
<logic:present name="myObject">
it is present
</logic:present>
检查某个对象的某个属性是否为null
<logic:present name="myObject" property="id">
id
</logic:present>
还可以检查当前经过认证的用户名:
<logic:present
hello
</logic:present>
或者该当前认证用户具有任何指定的角色:
<logic:present
welcome..
</logic:present>
logic:notPresent标签的应用正好和logic:present标签相反。
11)redirect
该标签用于实现页面转向,可传递参数。
例如. <logic:redirect href="http://www.chinaitlab.com"/>