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对象。