逻辑比较运算 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. 使用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判断变量是否包含指定常量,如果是则执行标记主体内容,否则不做任何动作。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指定的某个范围里 判断指定内容是否存在 logic:empty/logic:notEmpty 判断指定变量是否为null或空字符串””。 如果指定的变量为空或不存在(即即变量没有定义或其值为null ),logic:empty返回true,否则logic:empty返回false。logic:notEmpty相反。 变量可以有2种指定方法 1. 使用name属性指定变量为任何范围的某个已存在的变量。若指定了scope属性则变量限定在由scope指定的某个范围里 2. 使用name和property属性指定变量为任何范围的某个已存在的JavaBean的某个字段。若指定了scope属性则变量限定在由scope指定的某个范围里 logic:present /logic:notPresent 判断角色、用户、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的某个值是否存在,还能进行安全性的检查。 logic:messagesPresent/ logic:messagesNotPresent 判断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 - 3physics:111 - 4history:98 - 5geography:132 - 6math:120 - 7politics: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标记库

评论