逻辑比较运算
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 - 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标记库
评论