Logic标签
Struts标签库提供了一组在JSP中控制 流程 的标签。例如,对标签体的循环或条件赋值。这些标签打包在一个公共标签库中,其TLD文件为struts-logic.tld。逻辑标签库定义的标签执行三种功能:
• 条件逻辑
• 循环
• 转发/重定向响应
标签 功能
<equal> 如果常量值等于定义的实体的值,返回true
<notEqual> 如果常量值不等于定义的实体的值,返回true
<greaterEqual> 如果常量值等于或大于定义的实体的值,返回true
<lessEqual> 如果常量值等于或小于定义的实体的值,返回true
<lessThan> 如果常量值小于定义的实体的值,返回true
<greaterThan> 如果常量值大于定义的实体的值,返回true
如果名为name的请求参数没有出现,就执行标签体。接下来,是一个使用<logic:present>标签的例子:
<logic:present name=”bean” property=”prop” scope=”page”>
The bean property bean.prop is present
</logic:present>
该例中,假如有一个叫bean的bean,其范围为page,并且该bean有一个叫prop的属性,就执行标签体。
与上面相比,第三类条件标签理解起来要复杂一些。这些标签基于模式匹配的结果执行标签体的内容。换句话说,标签要计算一个特定项的值是否是一个指定常量的子串。有两个这类的标签:
• <logic:match>
• <logic:noMatch>
如果找到了匹配(对<logic:match>来说)或没有找到匹配(对<logic:noMatch>来说),标签允许JSP引警执行标签体。两个属于这一类的标签有相同的一组属性:所有这些属性在运行时可以赋 表达 式的值。
现在我们看一些使用上述标签的例子:
<logic:noMatch parameter=”name” value=”xyz”>
The parameter name is not a substring of the string xyz
</logic:noMatch>
如果有一个叫name的request参数,它的值不是字符串xyz的子串,上面的<logic:noMatch>标签执行标签体。下面是另外一个例子:
<logic:match parameter=”name” value=”xyz” location=”1”>
The parameter name is a substring of the string xyz from the index 1
</logic:match>
属性 描述
value 要比较的常量值
cookie 要比较的HTTP cookie的名字
header 要比较的HTTP请求头的名字
parameter 要比较的HTTP请求参数的名字
location 如果指定了该属性的值,将在该指定的现场进行匹配(索引值)
name 如果值与bean或bean属性比较,就是bean的名字
property 要与value比较的bean属性
scope 若指定了bean名字,则是bean的范围,若范围没有指定,就在page到application之间查找
如果有一个叫name的request参数,它的值是字符串xyz的子串,该标签执行标签体,不过子串一定从xyz的索引值1开始,(换句话说,子串必须是Y或YZ)。
循环标签
logic标签库定义了<logic:iterate>标签,它根据在一个特定集中的元素个数,多次执行标签体的内容。集可以是 java .util.Iterator、java.util.Collection、java.util.Map类型或数组。有三种方式定义集(collection)。
• 使用运行时表达式,该表达式为collection属性返回一个集
• 定义一个作为bean的集,用name属性指定存储属性的名字
• 用name属性定义一个bean,用将返回集的property属性去定义bean属性
集的当前元素将定义为一个页面范围的bean,该标签的属性解释如表18.18所示。所有的属性可以在运行时赋值。
属性 描述
length 循环的最大次数
offset 循环开始处的索引值
collection 没有指定name属性时循环的集
name bean的名字,bean是集或bean的由property属性定义的属性是一个信
property 是集的bean属性的名字
id page范围的的bean的名字, 代码 段变量的名字,该变量保存在集中的当前元素的句柄
type 为当前元素定义的page范围bean的类型
scope 如果指定了bean的名字,就是该bean是范围,如果没有指定范围,在page到application之间查找
下面我们看看<logic:iterate>标签的一个例子:
<%
List myList = new ArrayList();
myLost.add(new Integer(0));
myList.add(new Integer(1));
myList.add(new Integer(2));
myList.add(new Integer(3));
myList.add(new Integer(4));
%>
<logic:iterate id =”currentInt”
collection=”<&=myList %>”
type=”java.lang.Integer”
offset=”1”
length=”2” >
<%= currentInt %>
</logic:iterate>
上面的代码将从列表的第二个元素开始,重复两个元素,它会使当前元素作为一个page范围和java.lang.Integer类型的代码段变量。换句话说,这段代码输出1和2。
转发和重定向标签
Struts逻辑标签库定义了转发响应的标签和另一个重定向到URL的标签。
转发标签
<logic:forward>标签转发或重定向响应到指定的全局ActionForward。全局ActionForward的类型决定是用PageContext转发响应,还是用senRedirect定向响应。为该标签定义的惟一属性是name属性,它包含有全局ActionForward的名字,下面是一个例子。
<logic:forward name = “MyGlobalForward”/>
重定向标签
<logic:redirect>标签是执行HTTP重定向的有效机制。根据指定的属性,可以用不同的方法重定向,也可以让 开发 者为重定向的URL指定查询参数。该标签的属性解释如表18.19,所有属性都可以在运行时赋值。
标签应该指定用forward、href或page属性的哪一个来指定响应重定向到的资源。下面是几个例子:
<%
request.setAttribute(“manager”,”Ranieri”);
%>
<logic:redirect href=http://www.myClub.co.uk
paramId=”manger”
paramName=”manager”
praramScope=”request”/>
属性 描述
forward 映射到相对路径的全局的ActionForward的逻辑名
href 资源的全限定URL地址
page 资源的相对路径
name 一种情况是:类型为Map的page、request、session或application属性名;它含有联系重定向的URL的 查询 参数的名一值对(如果没有指定property属性的话);另一种情况是:bean的名字,它有含有相同的信息Map类型的属性(如果指定了property)
property 类型为Map的bean属性的名字。这个bean的名字由上面的name属性给出
scope 如果指定了bean名字,这个范围是在要查找的bean内。如果没有指定范围,就在page到application范围内查找
paramId 定义一个特定查询参数的名字
paraName 一种情况是类型为String的bean的名字,它有查询参数的值(如果没有指定属性paramProperty);另一个情况是有一个属性(由paramProperty指定)含有查询参数值的bean
paramProperty String类型的bean属性,含有查询参数
paramScope 要查找的由paraName属性定义的bean的范围
这里将把响应重定到http://www.myClub.co.uk?manager=Ranieri。Bean中包含有在URL查询参数中的来自名-值对的值。再看下一个例子:
<%
HashMap queryMap = new HashMap();
queryMap.put(“manager”,”Ranieri”);
request.setAttribute(“manager”,queryMap);
%>
<%logic:redirect href=http://www.myClub.co.uk
name=”manager”
scope=”request”/>
与上一个重定向到相同的URL。不过这里用类型为Map的request属性来保存查询名-值对。
Struts标签库提供了一组在JSP中控制 流程 的标签。例如,对标签体的循环或条件赋值。这些标签打包在一个公共标签库中,其TLD文件为struts-logic.tld。逻辑标签库定义的标签执行三种功能:
• 条件逻辑
• 循环
• 转发/重定向响应
标签 功能
<equal> 如果常量值等于定义的实体的值,返回true
<notEqual> 如果常量值不等于定义的实体的值,返回true
<greaterEqual> 如果常量值等于或大于定义的实体的值,返回true
<lessEqual> 如果常量值等于或小于定义的实体的值,返回true
<lessThan> 如果常量值小于定义的实体的值,返回true
<greaterThan> 如果常量值大于定义的实体的值,返回true
如果名为name的请求参数没有出现,就执行标签体。接下来,是一个使用<logic:present>标签的例子:
<logic:present name=”bean” property=”prop” scope=”page”>
The bean property bean.prop is present
</logic:present>
该例中,假如有一个叫bean的bean,其范围为page,并且该bean有一个叫prop的属性,就执行标签体。
与上面相比,第三类条件标签理解起来要复杂一些。这些标签基于模式匹配的结果执行标签体的内容。换句话说,标签要计算一个特定项的值是否是一个指定常量的子串。有两个这类的标签:
• <logic:match>
• <logic:noMatch>
如果找到了匹配(对<logic:match>来说)或没有找到匹配(对<logic:noMatch>来说),标签允许JSP引警执行标签体。两个属于这一类的标签有相同的一组属性:所有这些属性在运行时可以赋 表达 式的值。
现在我们看一些使用上述标签的例子:
<logic:noMatch parameter=”name” value=”xyz”>
The parameter name is not a substring of the string xyz
</logic:noMatch>
如果有一个叫name的request参数,它的值不是字符串xyz的子串,上面的<logic:noMatch>标签执行标签体。下面是另外一个例子:
<logic:match parameter=”name” value=”xyz” location=”1”>
The parameter name is a substring of the string xyz from the index 1
</logic:match>
属性 描述
value 要比较的常量值
cookie 要比较的HTTP cookie的名字
header 要比较的HTTP请求头的名字
parameter 要比较的HTTP请求参数的名字
location 如果指定了该属性的值,将在该指定的现场进行匹配(索引值)
name 如果值与bean或bean属性比较,就是bean的名字
property 要与value比较的bean属性
scope 若指定了bean名字,则是bean的范围,若范围没有指定,就在page到application之间查找
如果有一个叫name的request参数,它的值是字符串xyz的子串,该标签执行标签体,不过子串一定从xyz的索引值1开始,(换句话说,子串必须是Y或YZ)。
循环标签
logic标签库定义了<logic:iterate>标签,它根据在一个特定集中的元素个数,多次执行标签体的内容。集可以是 java .util.Iterator、java.util.Collection、java.util.Map类型或数组。有三种方式定义集(collection)。
• 使用运行时表达式,该表达式为collection属性返回一个集
• 定义一个作为bean的集,用name属性指定存储属性的名字
• 用name属性定义一个bean,用将返回集的property属性去定义bean属性
集的当前元素将定义为一个页面范围的bean,该标签的属性解释如表18.18所示。所有的属性可以在运行时赋值。
属性 描述
length 循环的最大次数
offset 循环开始处的索引值
collection 没有指定name属性时循环的集
name bean的名字,bean是集或bean的由property属性定义的属性是一个信
property 是集的bean属性的名字
id page范围的的bean的名字, 代码 段变量的名字,该变量保存在集中的当前元素的句柄
type 为当前元素定义的page范围bean的类型
scope 如果指定了bean的名字,就是该bean是范围,如果没有指定范围,在page到application之间查找
下面我们看看<logic:iterate>标签的一个例子:
<%
List myList = new ArrayList();
myLost.add(new Integer(0));
myList.add(new Integer(1));
myList.add(new Integer(2));
myList.add(new Integer(3));
myList.add(new Integer(4));
%>
<logic:iterate id =”currentInt”
collection=”<&=myList %>”
type=”java.lang.Integer”
offset=”1”
length=”2” >
<%= currentInt %>
</logic:iterate>
上面的代码将从列表的第二个元素开始,重复两个元素,它会使当前元素作为一个page范围和java.lang.Integer类型的代码段变量。换句话说,这段代码输出1和2。
转发和重定向标签
Struts逻辑标签库定义了转发响应的标签和另一个重定向到URL的标签。
转发标签
<logic:forward>标签转发或重定向响应到指定的全局ActionForward。全局ActionForward的类型决定是用PageContext转发响应,还是用senRedirect定向响应。为该标签定义的惟一属性是name属性,它包含有全局ActionForward的名字,下面是一个例子。
<logic:forward name = “MyGlobalForward”/>
重定向标签
<logic:redirect>标签是执行HTTP重定向的有效机制。根据指定的属性,可以用不同的方法重定向,也可以让 开发 者为重定向的URL指定查询参数。该标签的属性解释如表18.19,所有属性都可以在运行时赋值。
标签应该指定用forward、href或page属性的哪一个来指定响应重定向到的资源。下面是几个例子:
<%
request.setAttribute(“manager”,”Ranieri”);
%>
<logic:redirect href=http://www.myClub.co.uk
paramId=”manger”
paramName=”manager”
praramScope=”request”/>
属性 描述
forward 映射到相对路径的全局的ActionForward的逻辑名
href 资源的全限定URL地址
page 资源的相对路径
name 一种情况是:类型为Map的page、request、session或application属性名;它含有联系重定向的URL的 查询 参数的名一值对(如果没有指定property属性的话);另一种情况是:bean的名字,它有含有相同的信息Map类型的属性(如果指定了property)
property 类型为Map的bean属性的名字。这个bean的名字由上面的name属性给出
scope 如果指定了bean名字,这个范围是在要查找的bean内。如果没有指定范围,就在page到application范围内查找
paramId 定义一个特定查询参数的名字
paraName 一种情况是类型为String的bean的名字,它有查询参数的值(如果没有指定属性paramProperty);另一个情况是有一个属性(由paramProperty指定)含有查询参数值的bean
paramProperty String类型的bean属性,含有查询参数
paramScope 要查找的由paraName属性定义的bean的范围
这里将把响应重定到http://www.myClub.co.uk?manager=Ranieri。Bean中包含有在URL查询参数中的来自名-值对的值。再看下一个例子:
<%
HashMap queryMap = new HashMap();
queryMap.put(“manager”,”Ranieri”);
request.setAttribute(“manager”,queryMap);
%>
<%logic:redirect href=http://www.myClub.co.uk
name=”manager”
scope=”request”/>
与上一个重定向到相同的URL。不过这里用类型为Map的request属性来保存查询名-值对。