Struts2.0学习笔记---ognl表达式的常见用法
2016-09-18 09:42
344 查看
OGNL优点:
1.能够访问对象的方法,例如list.size()
2.能够访问静态属性和静态方法
3.支持赋值操作与表达式串联 如 #value=5;
4.访问OGNL上下文和ActionContext(所有的servlet资源)
5.操作集合类对象
注attr对象从小到大的范围寻找,一旦找到了属性值,便不会继续寻找下去。
比如你想获取request域中的内容,可以这样:
举个例子:
ognlSuccess.jsp
#有三种用途:
1.#paramters 代表request提交的所有参数,#request代表request所有属性,#session,#application,#attr同前
2.用于过滤或者筛选集合 books.{#?this.price<20}表示所有价格低于20的书
3.用于构造map,#{'foo1':'bar1' , 'foo2':'bar2' };
若是要创建一个list对象,
判断元素是否在集合中:
ognl的投影:
例如要获取书的价格大于60的。
注意这里容易出错的地方:
1.能够访问对象的方法,例如list.size()
2.能够访问静态属性和静态方法
3.支持赋值操作与表达式串联 如 #value=5;
4.访问OGNL上下文和ActionContext(所有的servlet资源)
5.操作集合类对象
注attr对象从小到大的范围寻找,一旦找到了属性值,便不会继续寻找下去。
比如你想获取request域中的内容,可以这样:
<% request.setAttribute("name", "swk"); %> <s:property value="#request.name"/>
举个例子:
ognlSuccess.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%> <%@ taglib uri="/struts-tags" prefix="struts"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <style type="text/css"> body,td { font-size: 12px; } </style> </head> <body> <hr /> 所有的ID:<struts:property value="#parameters.id"/> <br/> 第一个ID:<struts:property value="#parameters.id[0]"/> <br/> request 中取属性:<struts:property value="#request.account"/> <br/> session 中取属性:<struts:property value="#session.account"/> <br/> application 中取属性:<struts:property value="#application.account"/> <br/> attr 中取属性:<struts:property value="#attr.account"/> <br/> <hr /> 价格大于18元的杂志共有 <struts:property value="magazineList.{?#this.price>18}.size()" /> 本,分别是:<br/> <struts:iterator value="magazineList.{?#this.price>18}"> <struts:property value="name" /> - ¥<struts:property value="price" />. <br/> </struts:iterator> <hr /> 名称包含“时代”二字的杂志共有 <struts:property value="magazineList.{?#this.name.contains('时代')}.size()"/> 本,分别是:<br/> <struts:iterator value="magazineList.{?#this.name.contains('时代')}"> <struts:property value="name" /> - ¥<struts:property value="price" />. <br/> </struts:iterator> <hr /> “足球之夜”的价格为 ¥<struts:property value="magazineList.{?#this.name.contains('足球之夜')}[0].price"/>。 <hr /> <!-- 一个标签内容既可以是文本,也可以是OGNL表达式时,这时标有 % 的被当作OGNL表达式,没有标 % 被当作普通字符串 --> <struts:form> <struts:label label="#request.account"></struts:label> <struts:label label="%{#request.account}"></struts:label> </struts:form> </body> </html>OgnlAction.java
package com.haowan; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.interceptor.ServletRequestAware; import org.apache.struts2.interceptor.SessionAware; import org.apache.struts2.util.ServletContextAware; import com.javabean.Magazine; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; //使用ServletContextAware便可以使用ServletContext对象,ServletRequestAware便可以使用request对象,SessionAware便可以使用Map<String,Object> session public class OgnlAction extends ActionSupport implements ServletContextAware, ServletRequestAware, SessionAware { private static final long serialVersionUID = -6175904602786022346L; private HttpServletRequest request; private ServletContext application; private Map<String, Object> session; @SuppressWarnings("all") private List<Magazine> magazineList = new ArrayList<Magazine>() { { add(new Magazine("时代周刊",10)); add(new Magazine("足球之夜", 19)); add(new Magazine("时尚", 20)); add(new Magazine("时代影视", 50)); } }; public void setServletRequest(HttpServletRequest request) { this.request = request; } public void setServletContext(ServletContext application) { this.application = application; } @SuppressWarnings("all") public void setSession(Map session) { this.session = session; } public String execute() { request.setAttribute("account", "account from request"); application.setAttribute("account", "account from response"); session.put("account", "account from session"); return Action.SUCCESS; } public List<Magazine> getMagazineList() { return magazineList; } public void setMagazineList(List<Magazine> bookList) { this.magazineList = bookList; } }struts.xml
<action name="ognl" class="com.haowan.OgnlAction"> <result>ognlSuccess.jsp</result> </action>
#有三种用途:
1.#paramters 代表request提交的所有参数,#request代表request所有属性,#session,#application,#attr同前
2.用于过滤或者筛选集合 books.{#?this.price<20}表示所有价格低于20的书
3.用于构造map,#{'foo1':'bar1' , 'foo2':'bar2' };
若是要创建一个list对象,
<s:set var="list" value="{'第一个','第二个','第三个'}"/> <!-- s:iterator标签在迭代集合时有个特点:会把当前迭达的对象放在值栈的栈顶 --> <s:iterator value="#list" > <s:property/><br> </s:iterator>若是要创建一个map对象,
<s:set var="maps" value="#{'key1':90, 'key2':35, 'key3':12}"/> <!-- s:iterator标签在迭代集合时有个特点:会把当前迭达的对象放在值栈的栈顶 --> <s:iterator value="#maps" > <s:property value="key"/> = <s:property value="value"/><br> </s:iterator>
判断元素是否在集合中:
<s:if test="'foo' not in {'xxx','bar'}"> 不在 </s:if> <s:else> 在 </s:else>
ognl的投影:
例如要获取书的价格大于60的。
public class PersonListAction { private String name; private List<Book> books; public List<Book> getBooks() { return books; } public void setBooks(List<Book> books) { this.books = books; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String execute(){ books = new ArrayList<Book>(); books.add(new Book(56, "javaweb", 90)); books.add(new Book(80, "ejb", 78)); books.add(new Book(23, "spring", 50)); name = "小张"; return "list"; } }
================会把Book 放在 stack top========= <br/> <s:iterator value="books.{?#this.price>60}"> <s:property value="name"/>,价格:<s:property value="price"/><br/> </s:iterator>便会遍历书的价格大于60的图书。
注意这里容易出错的地方:
<s:set var="list" value="books.{?this.price>60}"/>不可以先把这个价格大于60的获取,再遍历这个list,这个道理不难,这里的this指的肯定是书,也就是说,你是一个一个遍历books中的元素,肯定只能遍历一个判断一个,输出一个,而不会是先获取并储存。
相关文章推荐
- Struts2.1 OGNL 表达式 学习笔记
- [知了堂学习笔记]_ 正则表达式的组成及在Java中常见正则表达式的用法
- Struts-2.0学习笔记,关于ognl
- Struts2.1 OGNL 表达式 学习笔记
- Struts2.1 OGNL 表达式 学习笔记
- Struts2.1 OGNL 表达式 学习笔记
- Struts2.1 OGNL 表达式 学习笔记(转)
- Struts2.1 OGNL 表达式 学习笔记
- struts2.0 学习笔记
- struts 2.0 学习笔记
- Struts2.0入门的学习笔记
- Quartz.NET 2.0 学习笔记(4) :cron表达式
- [Struts2.0学习笔记]select标签
- [Struts2.0学习笔记]radio标签
- iOS学习笔记06—Nsstring常见用法
- Struts2.0 学习笔记
- Struts 2.0 学习笔记(3)
- 关于ognl+struts-tag与el+jstl互相代替,以及el和jstl的学习笔记
- Struts 2.0 学习笔记(2)
- struts之el表达式简单学习笔记