Struts Logic
标记库
逻辑库的标记能够用来处理外观逻辑而不需要使用
scriptlet。Struts逻辑标签库包含的标记能够有条件地产生输出文本,在对象集合中循环从而重复地产生输出文本,以及应用程序流程控制。它也提供了一组在JSP页中处理流程控制的标记。这些标记封装在文件名为struts-logic.tld的标记包中。
一、
比较标记
标记
|
功能
|
<logic:equal>
|
如果常数与被定义的实体相等,返回
true
|
<logic:notEqual>
|
如果常数与被定义的实体不相等,返回
true
|
<logic:greaterEqual>
|
如果常数大于等于被定义的实体,返回
true
|
<logic:lessEqual>
|
如果常数小于等于被定义的实体,返回
true
|
<logic:lessThan>
|
如果常数小于被定义的实体,返回
true
|
<logic:greaterThan>
|
如果常数大于被定义的实体,返回
true
|
这一类的所有标记有相同的属性
属性
|
描述
|
Value
|
要进行比较的常数值
|
Cookie
|
要进行比较的
HTTP cookie的名称
|
Header
|
要进行比较的
HTTP请求标头的名称
|
parameter
|
要进行比较的
HTTP请求参数的名称
|
Name
|
如果要进行比较的是
bean或bean的属性,则这个属性代表bean的名称
|
property
|
要进行比较的
bean属性的名称
|
Scope
|
Bean的作用域,如果没有指定作用域,则它的搜索范围是从页到应用程序
|
<
logic:equal
value
=
"localhost:8080"
header
=
"host"
>
主机地址为localhost:8080
</
logic:equal
>
从HTTP请求中读出host信息,与value属性所指定的值进行比较,当相同时输出“主机地址为localhost:8080”的信息。
二、
<logic:iterate>
标记
用于面页面中创建一个循环,以此来遍历如数组、Collection、Map、List这样的对象。
属性
|
描述
|
collection
|
如果没有设置
name属性,它就指定了要进行重复的集合
|
Id
|
页作用域
bean和脚本变量的名称,它保存着集合中当前元素的句柄
|
indexed
|
存放当前集合中正被访问的元素的序号
|
Length
|
指定了输出元素的个数
|
Name
|
作为集合的
bean的名称,或是一个bean名称,它由property属性定义的属性,是个集合
|
Offset
|
从第几个元素开始输出
|
property
|
作为集合的
Bean属性的名称
|
Scope
|
如果指定了
bean名称,这个属性设置bean的作用域。若没有设置,搜索范围从页到应用程序作用域
|
Type
|
为当前定义的页作用域
bean的类型
|
1
遍历数组
<%
String[] array={
"
中国"
,
"
日本"
,
"
法国"
,
"
美国"
,
"
意大利"
};
pageContext.setAttribute(
"array"
,array);
%>
<
logic:iterate
id
=
"arrayValue"
name
=
"array"
>
<
bean:write
name
=
"arrayValue"
/>
</
logic:iterate
>
从第2个元素开始输出,共输出2个元素。
<
logic:iterate
id
=
"arrayValue"
name
=
"array"
length
=
"2"
offset
=
"2"
>
<
bean:write
name
=
"arrayValue"
/>
</
logic:iterate
>
从第1元素开始输出,共输出4个元素,且带有序号。
<
logic:iterate
id
=
"arrayValue"
name
=
"array"
length
=
"4"
offset
=
"1"
indexId
=
"number"
>
<
bean:write
name
=
"number"
/>
<
bean:write
name
=
"arrayValue"
/><
br
/>
</
logic:iterate
>
2
遍历HashMap
<%
HashMap map=
new
HashMap();
map.put(
"country1"
,
"
中国"
);
map.put(
"country2"
,
"
日本"
);
map.put(
"country3"
,
"
法国"
);
map.put(
"country4"
,
"
美国"
);
map.put(
"country5"
,
"
意大利"
);
pageContext.setAttribute(
"map"
,map);
%>
<
logic:iterate
id
=
"mapValue"
name
=
"map"
>
<
bean:write
name
=
"mapValue"
property
=
"key"
/>
<
bean:write
name
=
"mapValue"
property
=
"value"
/><
br
/>
</
logic:iterate
>
注意:
1 HashMap
的输出是无序的,用LinkedHashMap则是有序输出的。
2
键值的property一定要指定为key和value。
3
遍历List
<%
ArrayList list=
new
ArrayList();
list.add(
"
中国"
);
list.add(
"
日本"
);
list.add(
"
法国"
);
list.add(
"
美国"
);
list.add(
"
意大利"
);
pageContext.setAttribute(
"list"
,list);
%>
<
logic:iterate
id
=
"listValue"
name
=
"list"
indexId
=
"number"
>
<
bean:write
name
=
"number"
/>
<
bean:write
name
=
"listValue"
/><
br
/>
</
logic:iterate
>
4
嵌套遍历
<%
String[] colors={
"red"
,
"green"
,
"blue"
,
"white"
,
"black"
};
String[] countries={
"
中国"
,
"
日本"
,
"
法国"
,
"
美国"
,
"
意大利"
};
String[] persons={
"
张三"
,
"
李四"
,
"
王五"
,
"
赵六"
,
"
刘七"
};
ArrayList list=
new
ArrayList();
list.add(colors);
list.add(countries);
list.add(persons);
pageContext.setAttribute(
"list"
,list);
%>
<
logic:iterate
id
=
"first"
name
=
"list"
indexId
=
"numberfirst"
>
<
bean:write
name
=
"numberfirst"
/>
<
logic:iterate
id
=
"second"
name
=
"first"
>
<
bean:write
name
=
"second"
/>
</
logic:iterate
>
<
br
/>
</
logic:iterate
>
三、
Match
标记
Match标记的功能有些类似于java.lang.String类中的indexOf()方法。
<logic:match>:判断变量是
否包含指定的常量字符串。
<logic:notMatch>:判断变量是否
不包含指定的常量字符串。
这些标记允许
JSP引擎在发现了匹配或是没有发现时计算标记主体。属性如下:
属性
|
描述
|
Cookie
|
要进行比较的
HTTP cookie的名称
|
Header
|
要进行比较的的
HTTP标头 的名称
|
parameter
|
要进行比较的的
HTTP请求参数的名称
|
Name
|
若要对
bean或bean的属性进行比较,这个属性是用户指定bean的名称
|
location
|
有两个值
start表示是否以此字符串开头,end表示是否以此字符串结尾.
|
scope
|
如果对
bean进行比较,这个属性指定了bean的作用域。如果没有设置这个参数,搜索范围是从页到应用程序作用域
|
property
|
要进行比较的
bean的属性名称
|
value
|
要进行比较的常数值
|
判断name中是否包含value,为true时,输出。
<%
pageContext.setAttribute(
"str"
,
"Hello,World!"
);
%>
<
logic:match
name
=
"str"
value
=
"Hello"
>
包含
<
bean:write
name
=
"str"
/>
</
logic:match
>
判断naem中是否以value结尾,为true时,输出。
<%
pageContext.setAttribute(
"str"
,
"Hello,World!"
);
%>
<
logic:match
name
=
"str"
value
=
"Hello"
location
=
"end"
>
包含
<
bean:write
name
=
"str"
/>
</
logic:match
>
注意:location属性的start和end有点类似于java.lang.String类的startWith()和endWith()方法。
四、
Presence
标记
1 <logic:present>
和<logic:notPersent>
:
用于判断所指定的对象是否存在。
属性
|
描述
|
Cookie
|
由这个属性指定的
cookie将被检查是否存在
|
Header
|
由这个属性指定的请求标头将被检查是否存在
|
parameter
|
由这个属性指定的请求参数将被检查是否存在
|
Name
|
如果没有设置
property属性,那么有这个属性指定的bean将被检查是否存在。如果设置了,那么bean和bean属性都将被检查是否存在。
|
property
|
检查有
name属性指定的bean中是否存在指定的属性
|
Scope
|
如果指定了
bean的名称,这就是bean的作用域。如果没有指定作用域,搜索的范围从页到应用程序作用域。
|
Role
|
检查当前已经确认的用户是否属于特殊的角色
|
User
|
检查当前已经确认的用户是否有特定的名称
|
<%
pageContext.setAttribute(
"str"
,
"Hello,World!"
);
%>
<
logic:notPresent
name
=
"strvalue"
property
=
"str"
scope
=
"page"
>
页面内存在str对象,其值是${str}!
</
logic:notPresent
>
2 <logic:messagesPresent>
和<logic:messagesNotPresent>
:
用于判断是否在request范围内存在特定的ActionMessages或ActionErrros对象。
属性
|
描述
|
Name
|
指定了
ActionMessages在request或session对象内存储时的key值。
|
message
|
为
true时,表示使用Globals.MESSAGE_KEY作为request对象中获取ActionMessages的key值,此时无论name指定什么都无效; 为false时,则表示从name属性所指定的值作为request对象中获取ActionMessages的key值,
若不设置
name属性的值,则使用用默认的Globals.MESSAGE_KEY.
|
parameter
|
由这个属性指定的请求参数将被检查是否存在
|
property
|
检查
ActionMessages对象中某条特定消息的key值。
|
<%
ActionMessages messages =
new
ActionMessages();
messages.add(
"msg"
,
new
ActionMessage(
"default.message"
));
request.setAttribute(org.apache.struts.Globals.MESSAGE_KEY,messages);
%>
<
logic:messagesPresent
message
=
"true"
property
=
"msg"
>
所查找的ActionMessages的值是:
<
bean:message
key
=
"default.message"
name
=
"msg"
/>
</
logic:messagesPresent
>
五、
Empty
标记
<logci:empty>和<logic:notEmpty>
用于判断所指定的字符串是否为空。
<%
pageContext.setAttribute(
"test1"
,
""
);
pageContext.setAttribute(
"test2"
,
"hello"
);
%>
<
logic:empty
name
=
"test1"
scope
=
"page"
>
test1
为空
</
logic:empty
>
<
logic:notEmpty
name
=
"test2"
scope
=
"page"
>
test2
不为空!其值是:
<
bean:write
name
=
"test2"
/>
</
logic:notEmpty
>
六、
转发和重定向标记
1
转发标记<logic:forward>
<logic:forward>标记能够将响应转发给重定向到特定的全局
ActionForward上。ActionForward的类型决定了是使用PageContext转发响应,还是使用sendRedirect将响应进行重定向。此标记只有一个”name”属性,用来指定全局ActionForward的名称,例如:
<logic:forward name=”myGlobalForward”/>
2
重定向标记<logic:redirect>
<logic:redirect>标记是一个能够执行
HTTP重定向的强大工具。根据指定的不同属性,它能够通过不同的方式实现重定向。它还允许开发人员指定重定向URL的查询参数。属性如
下:
属性
|
描述
|
Forward
|
映射了资源相对路径的
ActionForward
|
Href
|
资源的完整
URL
|
Page
|
资源的相对路径
|
Name
|
Map类型的页名称,请求,会话或程序属性的名称,其中包含要附加大哦重定向
URL(如果没有设置 property属性)上的“名称-值”参数。或是具有Map类型属性的bean名称,其中包含相同的信息(没有设置property属性)
|
Property
|
Map类型的
bean属性的名称。Bean的名称由name属性指定。
|
Scope
|
如果指定了
bean的名称,这个属性指定搜索bean的范围。如果没有设置,搜索范围从页到应用程序作用域
|
ParamID
|
定义特定查询参数的名称
|
ParamName
|
字符串类型的
bean的名称,其中包含查询参数的值(如果没有设置paramProperty属性);或是一个bean的名称,它的属性(在paramProperty属性中指定)包含了查询参数值
|
paramProperty
|
字符串
bean属性的名称,其中包含着查询参数的值
|
ParamScope
|
ParamName定义的
bean的搜索范围
|
使用这个标记时至少要指定forward,href或page中的一个属性,以便标明将响应重定向到哪个资源。