Struts中OGNL与EL表达式 struts2的ognl表达式
<%@tagliburi="/struts-tags"prefix="s"%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
<html>
<head>
<title>OGNL的使用</title>
</head>
<body>
<h3>OGNL的使用</h3><hr/>
访问Action中的普通属性:<s:propertyvalue="loginname"/><br/>
访问Action中的对象属性:<s:propertyvalue="user.birthday"/><br/>
访问Action中的Set属性:<s:propertyvalue="courseSet.toArray()[0]"/><br/>
访问Action中的List属性:<s:propertyvalue="list[0]"/><br/>
访问Action中的Map属性的键:<s:propertyvalue="map.keys.toArray()[1]"/><br/>
访问Action中的Map属性的值:<s:propertyvalue="map.values.toArray()[1]"/><br/>
访问Action中的Map属性的指定键对应的值:<s:propertyvalue="map['z']"/><br/>
访问Action中的Map属性的大小:<s:propertyvalue="map.size"/><br/>
<hr/>
访问ActionContext中的普通属性:<s:propertyvalue="#inte"/><br/>
访问ActionContext中的对象属性:<s:propertyvalue="#user2.loginname"/><br/>
<hr/>
访问Action中的普通方法:<s:propertyvalue="getAppName()"/><br/>
访问ActionContext中的某个对象上的普通方法:<s:propertyvalue="#user2.info()"/><br/>
<hr/>
访问静态属性:<s:propertyvalue="@java.lang.Math@PI"/><br/>
访问静态方法:<s:propertyvalue="@java.lang.Math@floor(44.56)"/><br/>
访问Math类中的静态方法:<s:propertyvalue="@@floor(44.56)"/><br/>
<hr/>
调用java.util.Date的构造方法:<s:datename="newjava.util.Date()"format="yyyy-MM-ddHH:mm:ss"/><br/>
调用java.util.Date的构造方法创建对象,再调用它的方法:<s:propertyvalue="newjava.util.Date().getTime()"/><br/>
<hr/>
投影查询:获取userList中所有loginname的列表:<s:propertyvalue="userList.{loginname}"/><br/>
选择查询:获取userList中所有score大于60的loginname列表:<s:propertyvalue="userList.{?#this.score>60.0}.{loginname}"/><br/>
选择查询:获取userList中所有score大于60并且gender为true的loginname列表:<s:propertyvalue="userList.{?(#this.score>60.0&&#this.gender)}.{loginname}"/><br/>
选择查询:获取userList中所有score大于60并且gender为true的第一个元素的loginname:<s:propertyvalue="userList.{^(#this.score>60.0&&#this.gender)}.{loginname}"/><br/>
选择查询:获取userList中所有score大于60并且gender为true的最后一个元素的loginname:<s:propertyvalue="userList.{$(#this.score>60.0&&#this.gender)}.{loginname}"/><br/>
<hr/>
访问名为xxx的请求参数对应的第一个值:<s:propertyvalue="#parameters.xxx[0]"/><br/>
访问通过ActionContext中放入Request中的属性:<s:propertyvalue="#request.reqAtt"/><br/>
访问通过ServletActionContext中放入Request中的属性:<s:propertyvalue="#request.reqAtt2"/><br/>
访问通过ActionContext中放入Session中的属性:<s:propertyvalue="#session.sesAtt"/><br/>
访问通过ServletActionContext中放入Session中的属性:<s:propertyvalue="#session.sesAtt2"/><br/>
访问通过ActionContext中放入ServletContext中的属性:<s:propertyvalue="#application.appAtt"/><br/>
访问通过ServletActionContext中放入ServletContext中的属性:<s:propertyvalue="#application.appAtt2"/><br/>
直接访问属性域中指定名称的属性对应的值:<s:propertyvalue="#attr.sesAtt2"/><br/>
<br/><br/><hr/>
<s:iteratorvalue="userList"status="vs">
<s:iftest="%{#vs.odd}">
<span>
<s:propertyvalue="#vs.count"/>:<s:propertyvalue="loginname"/>,<s:datename="birthday"format="yyyy-MM-ddHH:mm:ss"/><br/>
</span>
</s:if>
<s:else>
<span>
<s:propertyvalue="#vs.count"/>:<s:propertyvalue="loginname"/>,<s:datename="birthday"format="yyyy-MM-ddHH:mm:ss"/><br/>
</span>
</s:else>
</s:iterator>
<hr/><s:debug/>
</body>
</html></span></span>
总结:
在上边大家都好奇为什么都用struts的S标签,因为OGNL是通常要结合Struts 2的标志一起使用,如<s:property value="xx" />等
Action类与JSP页面之间的数据传递
1) 通过HttpServletRequest,HttpSession,ServletContext来传递数据。
a) Action中传数据:在Action类的请求处理方法中先获取各个作用域对象
ServletActionContext.getRequest();
ServletActionContext.getRequest().getSession();
ServletActionContext.getServletContext();
然后调用相应的setAttribute(String "键", Object 值);
b) 在JSP页面中取数据:可以使用EL表达式或代码片段来取出对应作用域中属性值。
c) 页面中的请求参数传递到Action中时,Action中直接定义对应名称的属性,并提供setter方法即可封装此数据。
2) 通过ActionContext实例来传递数据。 ActionContext针对每个正在执行Action的线程中绑定一份。
a) Action中通过ActionContext传递数据。
ActionContext提供了put(String "键", Object 值); //数据不会映射到HttpServletRequest中。
ActionContext提供的getSession().put(String "键", Object 值); //数据会自动映射到HttpSession中。
ActionContext提供的getApplication().put(String "键", Object 值); //数据会自动映射到ServletContext中。
b) 在JSP页面取数据:struts2推荐使用OGNL来取ActionContext中的数据。
1. Struts2中的OGNL的使用。
2. OGNL:对象图导航语言。通过OGNL表达式可以获取对象的属性,调用对象的方法,或构造出对象。
1) OGNL上下文中有一个根对象。这个根对象可以直接获取。不需要#。
2)支持常量:
字符串常量、字符常量、
数值常量:int、long、float、double
布尔常量:true、false
Null常量 : null
支持操作符:支持Java的所有操作符,还支持特有的操作符: ,、 {}、in、not in;
Struts2中的OGNL:
1) Struts2将ActionContext设置为OGNL上下文,并将值栈(ValueStack)作为OGNL的根对象放置到ActionContext中。
2) Struts2总是把当前Action实例放置在值栈的栈顶。所以,在OGNL中引用Action中的属性也可以省略“#”。
常用标签
1) <s:property value="OGNL"/>
2) <s:date name="OGNL" format=""/>
3) <s:if test="OGNL"></s:if><s:elseif test="OGNL"></s:elseif><s:else></s:else>
★4) <s:iterator value="OGNL" status="vs">...</s:iterator>
5) <s:debug/>
struts2中#、%和$这三个符号的使用方法【摘自max struts2教程】
一、"#"的用法
1、 访问OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:
parameters 包含当前HTTP请求参数的Map #parameters.id[0]作用相当于request.getParameter("id")
request 包含当前HttpServletRequest的属性(attribute)的Map #request.userName相当于request.getAttribute("userName")
session 包含当前HttpSession的属性(attribute)的Map #session.userName相当于session.getAttribute("userName")
application 包含当前应用的ServletContext的属性(attribute)的Map #application.userName相当于application.getAttribute("userName")
attr 用于按request > session > application顺序访问其属性(attribute) #attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止
2、用于过滤和投影(projecting)集合,如books.{?#this.price<100};
3、构造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。
二、"%"的用法
“%”符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。例如在Ognl.jsp中加入以下代码:
<h3>%的用途</h3>
<p><s:url value="#foobar['foo1']" /></p>
<p><s:url value="%{#foobar['foo1']}" /></p>
三、"$"的用法
1、用于在国际化资源文件中,引用OGNL表达式
2、在Struts 2配置文件中,引用OGNL表达式
例如:
<action name="AddPhoto">
<interceptor-ref name="fileUploadStack" />
<result type="redirect">ListPhotos.action? albumId=${albumId}</result>
</action>
更多阅读
灵与肉----关于小说《步步惊心》中十四阿哥与若曦情感的疑问 步步惊心八阿哥和若曦
灵 与 肉----关于小说《步步惊心》中十四阿哥与若曦情感的疑问最近。看了部小说叫《步步惊心》。这是一部以康熙年间九龙夺嫡为背景的清穿故事。看完后心中一直在质疑,为何若曦最后愿意追随十四阿哥。除了她的身不由
东京猫猫其三部中动画片与卡通的差别 东京猫猫小游戏
东京猫猫其三部中动画片与卡通的差别 1、小莓与苍山正在看罕有植物欣赏的时刻就曾经皱眉了 2、正在小莓与苍山皱眉没多久后,她就正在欣赏里碰见了毒麦 3、正在小莓毒麦看到猫猫雀巢咖啡
诗词鉴赏中衬托与对比手法运用的比较导学案 衬托手法的作文
学习目标:1、 理解并分清衬托和对比两种表达技巧2、 学会表达技巧体的答题格式高考诗歌要求对形象、语言和思想内容进行品评,而在鉴赏诗歌的表达技巧时,学生往往把衬托、对比两种手法搞混淆了,把“对比”当成“衬托”,或者相反,有的
Struts中OGNL与EL表达式 struts2的ognl表达式
<span><span><%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%><%@tagliburi="/struts-tags"prefix="s"%><!DOCTYPEHTMLPUBLIC"-/
李小龙与功夫明星们的“亲密接触” 各功夫明星评价李小龙
作为七十年代首屈一指的功夫巨星李小龙,在其短暂的演艺生涯中,也与当时香港影坛的众多功夫明星有过交流与接触.一位是威震世界的“功夫之王”李小龙,另一位则是红遍大江南北的“霍大侠”黄元申,他们的“历史性”握手会有什么样的结