正文

logic标记库2007-03-13 10:41:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/hurongliang/23916.html

分享到:

逻辑比较运算

logic:equal/logic:notEqual

logic:equal变量等于常量时结果为true,否则为false

logic:notEqual变量不等于常量时结果为true

logic:greaterEqual/logic:greaterThan

logic:greaterEqual变量大于或等于常量时结果为true,否则为false

logic:greaterThan变量大于常量时结果为true,否则为false

logic:lessEqual/ logic:lessThan

logic:lessEqual变量小于或等于常量时结果为true,否则为false

logic:lessThan变量小于常量时结果为true,否则为false

用法

所有比较运算标记都比较一个变量和一个常量的大小。如果结果为true,则执行标签主体的内容,否则不执行任何动作。

常量由value属性指定。变量可以有五种指定方法

1.  使用cookie属性指定变量为某个cookie的关键字的名称。

2.  使用header属性指定变量为HTTP头的某个关键字的名称。

3.  使用parameter属性指定变量为某个请求参数

4.  使用name属性指定变量为任何范围的某个已存在的变量。若指定了scope属性则变量限定在由scope指定的某个范围里

5.  使用nameproperty属性指定变量为任何范围的某个已存在的JavaBean的某个字段。若指定了scope属性则变量限定在由scope指定的某个范围里

注意

1.         如果变量不存在则比较结果为false,而不是抛出异常。

2.         如果两个字符串都可以转换成数字,就比较数字的大小,否则进行字符串的比较如:
    <%
    request.setAttribute("str","100");
    
%>
     <logic:greaterThan name="str" value="90">greater</logic:greaterThan>
结果为true。又如:
    <%
    request.setAttribute("str","100x");
    
%>
     <logic:greaterThan name="str" value="90x">greater</logic:greaterThan>
结果为false

字符串匹配

logic:match / logic:notMatch

logic:match判断变量是否包含指定常量,如果是则执行标记主体内容,否则不做任何动作。logic:notMatchlogic:match相反。

用法

该标记本质上提供了String对象的indexOf()startsWith()endsWith()方法。所有匹配区分大小写。

location属性:如果没有指定则执行indexOf()方法。如果指定为start则标记执行startsWith方法;如果指定为end则执行endsWith()方法。

常量由value属性指定。变量可以有五种指定方法

6.  使用cookie属性指定变量为某个cookie的关键字的名称。

7.  使用header属性指定变量为HTTP头的某个关键字的名称。

8.  使用parameter属性指定变量为某个请求参数

9.  使用name属性指定变量为任何范围的某个已存在的变量。若指定了scope属性则变量限定在由scope指定的某个范围里

使用nameproperty属性指定变量为任何范围的某个已存在的JavaBean的某个字段。若指定了scope属性则变量限定在由scope指定的某个范围里

判断指定内容是否存在

logic:empty/logic:notEmpty

判断指定变量是否为null或空字符串””

如果指定的变量为空或不存在(即即变量没有定义或其值为null ),logic:empty返回true,否则logic:empty返回falselogic:notEmpty相反。

变量可以有2种指定方法

1.         使用name属性指定变量为任何范围的某个已存在的变量。若指定了scope属性则变量限定在由scope指定的某个范围里

2.         使用nameproperty属性指定变量为任何范围的某个已存在的JavaBean的某个字段。若指定了scope属性则变量限定在由scope指定的某个范围里

logic:present /logic:notPresent

判断角色、用户、cookieheaderparameterJavaBean或某个范围的变量是否存在

如果指定变量不存在(即变量没有定义或其值为null),logic:present范围false,如果存在(即使其值是空字符串),则返回truelogic:notPresent logic:present相反

此标签除了进行标准的存在性检查外还提供了与J2EE安全系统交互的机制,以确定授权的用户是否具有指定的用户名

变量的指定有以下七种方法

1.  指定cookie属性

2.  指定header属性

3.  指定parameter属性

4.  指定name属性

5.  指定nameproperty属性

6.  指定user属性 判断当前通过授权的用户是否具有指定的用户名。可以设置多个用户名,用逗号分开如:user=”user1,user2”

7.  指定role属性判断当前通过授权的用户是否具有指定的安全角色。可以设置多个安全叫色,用逗号分开如:user=”role1,role2”

logic:presentempty的区别

变量为空是指变量的值为空字符串如String numberEmpty=””

变量为null值变量的值未指定如String numbserNull = null

变量未定义是指变量没有声明。

变量是否存在是指变量是否为null或变量有没有定义。

logic:present主要有两个区别

1.  logic:notEmpty当变量是存在且变量不为空时结果为truelogic:present当变量存在时为true

2.  logic:empty只能比较某个范围的变量,logic:除了检查某个范围的变量外,还能检查cookie,header,parameter的某个值是否存在,还能进行安全性的检查。

logic:messagesPresent/ logic:messagesNotPresent

判断request范围内是否存在指定的ActionMessages(或取子类ActionErrors)对象,以及在此对象中是否存在指定的信息。

logic:messagesPresent 判断指定的信息是否存在。logic:messagesNotPresent logic:messagesNotPresent相反。

name属性:指定request范围内检索ActionMessages对象的属性key,默认为Globals.ERROR_KEY

message属性:如果为true则设定request范围内检索ActionMessages对象的属性keyGlobals.MESSAGE_KEY。此时name属性无效。如果为false,则由name指定key

property属性:如果指定则检查指定的message是否存在,否则检查ActiionMessages是否存在。

举例如下:

    meessagesPresent用法<br>

    <%

      ActionErrors errors = new ActionErrors();

      errors.add("errmsg",new ActionMessage("信息内容"));

      request.setAttribute(Globals.ERROR_KEY,errors);

     %>

<logic:messagesPresent>存在 message</logic:messagesPresent>

logic:messagesPresent标记的执行结果为 true

循环遍历

logic:iterate

遍历集合中的元素。

要遍历的集合通过以下三种方式指定:

1.  collection属性指定一个运行时的表达式

2.  name 属性指定

3.  nameproperty属性指定

集合必须是以下集中类型:

1.  基本类型或引用类型的数组

2.  java.util.Collection类型,包括ArrayListVector

3.  Enumeration类型

4.  Iterator类型

Map类型,包括HashMap, Hashtable, TreeMap.当遍历一个Map类型对象时,实际遍历的对象是Map.Entry,他包含两个属性
key –
关键字
value –
关键字对应的值
所以当你遍历Map时需要同时使用nameproperty属性指定Map和某个属性(property=”key”property=”value”

id属性保存遍历出的每个元素。

indexId保存此元素在集合中的位置。

length属性指定要遍历元素的最大个数。不指定则便利集合中的所有元素。

offset属性指定遍历的开始位置。默认从0开始。

scope属性指定集合所在范围。没有指定则依次从page,request,session,application范围搜索集合。

举例如下:
    <%
      HashMap course = new HashMap();
      course.put(
"math",new Integer(120));
      course.put(
"english",new Integer(122));
      course.put(
"chinese",new Integer(100));
      course.put(
"physics",new Integer(111));
      course.put(
"chymistry",new Integer(129));
      course.put(
"biology",new Integer(111));
      course.put(
"politics",new Integer(98));
      course.put(
"geography",new Integer(132));
      course.put(
"history",new Integer(98));
      pageContext.setAttribute(
"course",course);
     
%>
     <bean:size id="course_length" name="course"/>
     <logic:present name="course">
       <logic:iterate id="c" name="course" length="<%=course_length.toString()%>" offset="3" indexId="course_id">
         <bean:write name="c" property="key"/>:<bean:write name="c" property="value"/> - <bean:write name="course_id"/><br>
       </logic:iterate>
     </logic:present>
结果显示如下:
english:122 - 3
physics:111 - 4
history:98 - 5
geography:132 - 6
math:120 - 7
politics:98 – 8

转发或重定向

logic:forward

相当于在struts内部执行PageContext.forward() or HttpServletResponse.sendRedirect()

该标记根据name属性在Struts配置文件中查找一个forward,再根据该forward的定义决定转至特定的URL。如果forwardredirect属性设置为”true”则标记将重定向,否则直接转至。

redirect向浏览器发送一个响应,提示浏览器加载另一个页面。forward直接转至要加载的页面

forward只能转到相同服务器上的URLredirect可以转到任何的URL

logic:redirect

相当于在struts内部执行HttpServletResponse.sendRedirect()。浏览器不显示本页面的URL而是重定向后的URL

有以下三种方法指定URL

l  forward属性

l  page属性

l  href属性

(以上三种方法的用法跟link:rewrite方法相同)。

l  action属性。指向一个action

指定参数的方法有以下两种:

指定一个参数。
参数名由paramId指定,参数值由一个JSP变量指定,这个变量的值就作为paramId对应的参数的值。指定JSP变量有两种方法:
一种是由paramName属性指定。如:
    <%
      pageContext.setAttribute("name","rolia");
    
%>
     <logic:redirect forward="showparams"
                     
paramId="name"
                     
paramName="name"
                     
scope="page"/>
一种是由paramName属性指定一个JavaBeanparamProperty属性指定这个bean的某个属性,这个属性的值作为参数值。

指定多个参数。
多个参数保存在一个Map对象中,它里面的每个map.entry对象作为一个参数名/值对传递。
指定Map对象有两种方法:
一种是由name属性指定。如:
    <%
      HashMap course = new HashMap();
      course.put(
"math",new Integer(120));
      course.put(
"english",new Integer(122));
      course.put(
"chinese",new Integer(100));
      course.put(
"physics",new Integer(111));
      course.put(
"chymistry",new Integer(129));
      course.put(
"biology",new Integer(111));
      course.put(
"politics",new Integer(98));
      course.put(
"geography",new Integer(132));
      course.put(
"history",new Integer(98));
      pageContext.setAttribute(
"course",course);
    
%>
     <logic:redirect forward="showparams"
                     
name="course"/>

一种是由name属性指定一个JavaBeanproperty属性指定JavaBean的某个属性,这个属性为一个Map对象。

小结

l  逻辑标签判断条件是否为true,是则执行标签主体的内容。

l  多数标签可以设置name属性,和property属性,用法一样。scope属性指定范围。如果没有指定,依次在page,request,sessionapplication范围里查找。

l  nest标记库

阅读(3670) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册