logic 标签用法

逻辑比较运算
logic:equal变量等于常量时结果为true,否则为false。
logic:notEqual变量不等于常量时结果为true
logic:greaterEqual变量大于或等于常量时结果为true,否则为false。
logic:greaterThan变量大于常量时结果为true,否则为false。
logic:lessEqual变量小于或等于常量时结果为true,否则为false。
logic:lessThan变量小于常量时结果为true,否则为false。
用法
所有比较运算标记都比较一个变量和一个常量的大小。如果结果为true,则执行标签主体的内容,否则不执行任何动作。
常量由value属性指定。变量可以有五种指定方法
1. 使用cookie属性指定变量为某个cookie的关键字的名称。
2. 使用header属性指定变量为HTTP头的某个关键字的名称。
3. 使用parameter属性指定变量为某个请求参数
4. 使用name属性指定变量为任何范围的某个已存在的变量。若指定了scope属性则变量限定在由scope指定的某个范围里
5. 使用name和property属性指定变量为任何范围的某个已存在的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相反。
用法
该标记本质上提供了String对象的indexOf()、startsWith()和endsWith()方法。所有匹配区分大小写。
location属性:如果没有指定则执行indexOf()方法。如果指定为start则标记执行startsWith方法;如果指定为end则执行endsWith()方法。
常量由value属性指定。变量可以有五种指定方法
6. 使用cookie属性指定变量为某个cookie的关键字的名称。
7. 使用header属性指定变量为HTTP头的某个关键字的名称。
8. 使用parameter属性指定变量为某个请求参数
9. 使用name属性指定变量为任何范围的某个已存在的变量。若指定了scope属性则变量限定在由scope指定的某个范围里
使用name和property属性指定变量为任何范围的某个已存在的JavaBean的某个字段。若指定了scope属性则变量限定在由scope指定的某个范围里
判断指定变量是否为null或空字符串””。
如果指定的变量为空或不存在(即即变量没有定义或其值为null ),logic:empty返回true,否则logic:empty返回false。logic:notEmpty相反。
变量可以有2种指定方法
1.          使用name属性指定变量为任何范围的某个已存在的变量。若指定了scope属性则变量限定在由scope指定的某个范围里
2.          使用name和property属性指定变量为任何范围的某个已存在的JavaBean的某个字段。若指定了scope属性则变量限定在由scope指定的某个范围里
判断角色、用户、cookie、header、parameter、JavaBean或某个范围的变量是否存在
如果指定变量不存在(即变量没有定义或其值为null),logic:present范围false,如果存在(即使其值是空字符串),则返回true。logic:notPresent 与logic:present相反
此标签除了进行标准的存在性检查外还提供了与J2EE安全系统交互的机制,以确定授权的用户是否具有指定的用户名
变量的指定有以下七种方法
1. 指定cookie属性
2. 指定header属性
3. 指定parameter属性
4. 指定name属性
5. 指定name和property属性
6. 指定user属性 判断当前通过授权的用户是否具有指定的用户名。可以设置多个用户名,用逗号分开如:user=”user1,user2”。
7. 指定role属性判断当前通过授权的用户是否具有指定的安全角色。可以设置多个安全叫色,用逗号分开如:user=”role1,role2”。
logic:present和empty的区别
变量为空是指变量的值为空字符串如String numberEmpty=””。
变量为null值变量的值未指定如String numbserNull = null。
变量未定义是指变量没有声明。
变量是否存在是指变量是否为null或变量有没有定义。
logic:present主要有两个区别
1. logic:notEmpty当变量是存在且变量不为空时结果为true,logic:present当变量存在时为true
2. logic:empty只能比较某个范围的变量,logic:除了检查某个范围的变量外,还能检查cookie,header,parameter的某个值是否存在,还能进行安全性的检查。
判断request范围内是否存在指定的ActionMessages(或取子类ActionErrors)对象,以及在此对象中是否存在指定的信息。
logic:messagesPresent 判断指定的信息是否存在。logic:messagesNotPresent 与logic:messagesNotPresent相反。
name属性:指定request范围内检索ActionMessages对象的属性key,默认为Globals.ERROR_KEY。
message属性:如果为true则设定request范围内检索ActionMessages对象的属性key为Globals.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. name和property属性指定
集合必须是以下集中类型:
1. 基本类型或引用类型的数组
2. java.util.Collection类型,包括ArrayList和Vector
3. Enumeration类型
4. Iterator类型
Map类型,包括HashMap, Hashtable, 和 TreeMap.当遍历一个Map类型对象时,实际遍历的对象是Map.Entry,他包含两个属性
key – 关键字
value – 关键字对应的值
所以当你遍历Map时需要同时使用name和property属性指定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。如果forward的redirect属性设置为”true”则标记将重定向,否则直接转至。
redirect向浏览器发送一个响应,提示浏览器加载另一个页面。forward直接转至要加载的页面
forward只能转到相同服务器上的URL,redirect可以转到任何的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属性指定一个JavaBean,paramProperty属性指定这个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属性指定一个JavaBean,property属性指定JavaBean的某个属性,这个属性为一个Map对象。
小结
l 逻辑标签判断条件是否为true,是则执行标签主体的内容。
l 多数标签可以设置name属性,和property属性,用法一样。scope属性指定范围。如果没有指定,依次在page,request,session和application范围里查找。
l nest标记库
 
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值