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中的一个属性,以便标明将响应重定向到哪个资源。
转载自:http://blog.csdn.net/zerolsy/archive/2008/06/24/2582500.aspx