`

Struts OGNL表达式实例

 
阅读更多

Person.java

package com.bjsxt.struts2.ognl;

import java.util.Date;

public class Person {
	private String name;
	private int age;
	private Date birthday;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	

}

 OgnlAction1.java

package com.bjsxt.struts2.ognl;

import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;


public class OgnlAction1 extends ActionSupport {
	private static final long serialVersionUID = -1494290883433357310L;
	private List<Person> persons;
	private String msg;
	
	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public String execute() throws Exception {
		
		
		ActionContext ctx = ActionContext.getContext();  // 获得ActionContext实例,以便访问Servlet API
		
		ctx.getApplication().put("msg", "application信息");// 存入application
		
		ctx.getSession().put("msg", "seesion信息");// 保存session
		
		HttpServletRequest request = ServletActionContext.getRequest();// 保存request信息
		request.setAttribute("msg", "request信息");
		
		persons = new LinkedList<Person>();   // 为persons赋值
		Person person1 = new Person();
		person1.setName("pla1");
		person1.setAge(26);
		person1.setBirthday(new Date());
		persons.add(person1);

		Person person2 = new Person();
		person2.setName("pla2");
		person2.setAge(36);
		person2.setBirthday(new Date());
		persons.add(person2);

		Person person3 = new Person();
		person3.setName("pla3");
		person3.setAge(16);
		person3.setBirthday(new Date());
		persons.add(person3);

		return SUCCESS;

	}

	public List<Person> getPersons() {
		return persons;
	}

	public void setPersons(List<Person> persons) {
		this.persons = persons;
	}
}

 showOGNL.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'showOGNL.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">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>      
  
    <h3>访问OGNL上下文和Action上下文</h3>  
    
  
    <!-- 使用OGNL访问属性值--> 
  
    <p>parameters: <s:property value="#parameters.msg" /></p>  
  
    <p>request.msg: <s:property value="#request.msg" /></p>  
  
    <p>session.msg: <s:property value="#session.msg" /></p>  
  
    <p>application.msg: <s:property value="#application.msg" /></p>  
  
    <p>attr.msg: <s:property value="#attr.msg" /></p>  
  
    <hr />  
    
    <h3>访问值栈中的action的普通属性和集合属性</h3>
    <s:property value="msg"/><br/>
    ${param.msg }<br/>
    
    <ul>
        <li>访问List:<s:property value="persons"/></li>
		<li>访问List中某个元素:<s:property value="persons[1]"/></li>
		<li>访问List中某个元素的属性:<s:property value="persons[1].name"/></li>
		<li>访问List中元素某个属性的集合:<s:property value="persons.{age}"/></li>
		<li>访问List中元素某个属性的集合中的特定值:<s:property value="persons.{age}[0]"/> | <s:property value="persons[0].age"/></li>
  </ul>
  <hr/>
    <h3>用于过滤和投影(projecting)集合</h3>  
  
    <p>年龄大于20</p>  
  
    <ul>  
  
    <!--  判断年龄-->  
  
        <s:iterator value="persons.{?#this.age>20}">  
  
            <li><s:property value="name" /> - 年龄:<s:property value="age" /></li>  
  
        </s:iterator>  
  
    </ul>  
  
    <p>姓名为pla1的年龄: <s:property value="persons.{?#this.name=='pla1'}.{age}[0]"/></p>  
  
    <hr />  
  
    <h3>构造Map</h3>  
  
    <s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" />  
  
    <p>The value of key "foo1" is <s:property value="#foobar['foo1']" /></p>  
  	
  	<hr /> 
  	
  	<h4>%符号的用法</h4>  
  
    <s:set name="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" />  
  
    <p>The value of key "foo1" is <s:property value="#foobar['foo1']" /></p>  
  
    <p>不使用%:<s:url value="#foobar['foo1']" /></p>  
  
    <p>使用%:<s:url value="%{#foobar['foo1']}" /></p>  
  
  	<hr />
   		<%  
            request.setAttribute("req", "request scope");  
            request.getSession().setAttribute("sess", "session scope");  
            request.getSession().getServletContext().setAttribute("app",  
                    "aplication scope");  
        %>  
   		1.通过ognl表达式获取 属性范围中的值  
        <br>  
        <s:property value="#request.req" />  
        <br />  
        <s:property value="#session.sess" />  
        <br />  
        <s:property value="#application.app" />  
        <br />  
        <hr>  
  
       2.通过ognl表达式创建list 集合 ,并且遍历出集合中的值  
        <br>  
        <s:set name="list" value="{'eeeee','ddddd','ccccc','bbbbb','aaaaa'}"></s:set>  
        <s:iterator value="#list" var="o">  
            <!--   ${o }<br/>  --><!-- 用EL表达式输出 -->
            
            <s:property />  
            <br />  
        </s:iterator>  
        <br />  
        <hr>  
  
       3.通过ognl表达式创建Map 集合 ,并且遍历出集合中的值  
        <br>  
        <s:set name="map"  
            value="#{'1':'eeeee','2':'ddddd','3':'ccccc','4':'bbbbb','5':'aaaaa'}"></s:set>  
        <s:iterator value="#map" var="o">  
            <!--      ${o.key }->${o.value }<br/>   -->  
            <!-- <s:property value="#o.key"/>-><s:property value="#o.value"/><br/>   -->  
            <s:property value="key" />-><s:property value="value" />  
            <br />  
        </s:iterator>  
        <br />  
        <hr>  
      4.通过ognl表达式 进行逻辑判断  
        <br>  
        <s:if test="'aa' in {'aaa','bbb'}">  
            aa 在 集合{'aaa','bbb'}中;  
        </s:if>  
        <s:else>  
            aa 不在 集合{'aaa','bbb'}中;  
        </s:else>  
        <br />  
        <s:if test="#request.req not in #list">  
            	不 在 集合list中;  
        </s:if>  
        <s:else>  
           	 在 集合list中;  
        </s:else>  
        <br />  
        <hr>  
        
       5.通过ognl表达式 的投影功能进行数据筛选  
        <br>  
        <s:set name="list1" value="{1,2,3,4,5}"></s:set>  
        <s:iterator value="#list1.{?#this>2}" var="o">  
            <!-- #list.{?#this>2}:在list1集合迭代的时候,从中筛选出当前迭代对象>2的集合进行显示 -->  
            ${o }<br />  
        </s:iterator>  
        <br />  
        <hr>  
       6.通过ognl表达式 访问某个类的静态方法和值  
        <br>  
        <s:property value="@java.lang.Math@floor(32.56)" />  
  
        <s:property value="@com.rao.struts2.action.OGNL1Action@aa" />  
        <br />  
        <br />  
        <hr>  
      7.ognl表达式 迭代标签 详细  
        <br>  
        <s:set name="list2"  
            value="{'aa','bb','cc','dd','ee','ff','gg','hh','ii','jj'}"></s:set>  
        <table border="1">  
            <tr>  
                <td>索引 </td>  
                <td>值</td>  
                <td>奇?</td>  
                <td> 偶?</td>  
                <td>首?</td>  
                <td> 尾?</td>  
                <td>当前迭代数量</td>  
            </tr>  
            <s:iterator value="#list2" var="o" status="s">  
                <tr bgcolor="<s:if test="#s.even">pink</s:if>">  
                    <td>  
                        <s:property value="#s.getIndex()" />  
                    </td>  
                    <td>  
                        <s:property />  
                    </td>  
                    <td>  
                        <s:if test="#s.odd">Y</s:if>  
                        <s:else>N</s:else>  
                    </td>  
                    <td>  
                        <s:if test="#s.even">Y</s:if>  
                        <s:else>N</s:else>  
                    </td>  
                    <td>  
                        <s:if test="#s.first">Y</s:if>  
                        <s:else>N</s:else>  
                    </td>  
                    <td>  
                        <s:if test="#s.isLast()">Y</s:if>  
                        <s:else>N</s:else>  
                    </td>  
                    <td>  
                    <s:property value="#s.getCount()"/>  
                </td>  
                </tr>  
            </s:iterator>  
        </table>  
        <br>  
        <hr>       
        
        
       8.ognl表达式:  if/else if/else 详细<br>  
        <% request.setAttribute("aa",0); %>  
        <s:if test="#request.aa>=0 && #request.aa<=4">  
            	在0-4之间;  
        </s:if>  
        <s:elseif test="#request.aa>=4 && #request.aa<=8">  
            	在4-8之间;  
        </s:elseif>  
        <s:else>  
           	 大于8;  
        </s:else>  
        <br>  
        <hr>  
    9.ognl表达式: url 详细<br>  
        <% request.setAttribute("aa","sss"); %>  
        <s:url action="testAction" namespace="/aa/bb">  
            <s:param name="aa" value="#request.aa"></s:param>  
            <s:param name="id">100</s:param>  
        </s:url>  
        <br/>  
        <s:set name="myurl" value="'http://www.baidu.com'"></s:set>  
        value以字符处理:   <s:url value="#myurl"></s:url><br>  
        value明确指定以ognl表达式处理:    <s:url value="%{#myurl}"></s:url>  
        <br>  
        <hr>  
    10.ognl表达式: checkboxlist 详细<br>  
        1> .list 生成;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>  
        name:checkboxlist的名字<br>  
        list:checkboxlist要显示的列表<br>  
        value:checkboxlist默认被选中的选项,checked=checked<br>  
        <s:checkboxlist name="checkbox1" list="{'上网','看书','爬山','游泳','唱歌'}" value="{'上网','看书'}" ></s:checkboxlist>  
        <br>  
       	 以上生成代码:<br>  
          
            <input type="checkbox" name="checkbox1" value="上网" id="checkbox1-1" checked="checked"/>  
            <label for="checkbox1-1" class="checkboxLabel">上网</label>  
            <input type="checkbox" name="checkbox1" value="看书" id="checkbox1-2" checked="checked"/>  
            <label for="checkbox1-2" class="checkboxLabel">看书</label>  
            <input type="checkbox" name="checkbox1" value="爬山" id="checkbox1-3"/>  
            <label for="checkbox1-3" class="checkboxLabel">爬山</label>  
            <input type="checkbox" name="checkbox1" value="游泳" id="checkbox1-4"/>  
            <label for="checkbox1-4" class="checkboxLabel">游泳</label>  
            <input type="checkbox" name="checkbox1" value="唱歌" id="checkbox1-5"/>  
            <label for="checkbox1-5" class="checkboxLabel">唱歌</label>" <br> 
        2> .Map 生成;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>  
        name:checkboxlist的名字<br>  
        list:checkboxlist要显示的列表<br>  
        listKey:checkbox 的value的值<br>  
        listValue:checkbox 的lablel(显示的值)<br>  
        value:checkboxlist默认被选中的选项,checked=checked<br>  
        <s:checkboxlist name="checkbox2" list="#{1:'上网',2:'看书',3:'爬山',4:'游泳',5:'唱歌'}" listKey="key" listValue="value" value="{1,2,5}" ></s:checkboxlist>  
        <br>  
                       以上生成代码:<br>  
            <input type="checkbox" name="checkbox2" value="1" id="checkbox2-1" checked="checked"/>  
            <label for="checkbox2-1" class="checkboxLabel">上网</label>  
            <input type="checkbox" name="checkbox2" value="2" id="checkbox2-2" checked="checked"/>  
            <label for="checkbox2-2" class="checkboxLabel">看书</label>  
            <input type="checkbox" name="checkbox2" value="3" id="checkbox2-3"/>  
            <label for="checkbox2-3" class="checkboxLabel">爬山</label>  
            <input type="checkbox" name="checkbox2" value="4" id="checkbox2-4"/>  
            <label for="checkbox2-4" class="checkboxLabel">游泳</label>  
            <input type="checkbox" name="checkbox2" value="5" id="checkbox2-5" checked="checked"/>  
            <label for="checkbox2-5" class="checkboxLabel">唱歌</label>  
        <hr>  
        <s:debug></s:debug>
</body>  

</html>

 struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant><!--访问静态方法时需要-->
    
	<include file="/com/bjsxt/struts2/ognl/ognl1.xml"/>
    


</struts>

 ognl1.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <package name="ognl" extends="struts-default">
      

        <action name="ognl1" class="com.bjsxt.struts2.ognl.OgnlAction1">
            <result>/showOGNL.jsp</result>
        </action>
      

    </package>
    
</struts>

 配置完成后在浏览器地址栏中输入:http://localhost:8080/Struts2_1900_OGNL/ognl1.action?msg=aa进行访问。浏览器显示结果如下

 

 

 

 

 

 

  • 大小: 22 KB
  • 大小: 10.8 KB
  • 大小: 13.9 KB
  • 大小: 22.3 KB
  • 大小: 8.8 KB
分享到:
评论

相关推荐

    Struts2 OGNL表达式实例详解

    主要介绍了Struts2 OGNL表达式实例详解,相关实例代码,需要的朋友可以参考。

    OGNL表达式语言.txt

    OGNL表达式语言: 相对EL表达式,它提供了平时我们需要的一些功能,如: ? 支持对象的方法调用 ,如 xxx.sayHello(); ? 支持类静态方法调用和值的访问,表达式的格式为@[类全名]@[方法名|值名],例如:@java....

    通过实例深入学习Java的Struts框架中的OGNL表达式使用

    主要通过实例介绍了Java的Strus框架中的OGNL表达式使用,Struts框架是Java的SSH三大web开发框架之一,需要的朋友可以参考下

    Struts2详解,Struts2与Struts1的区别

    新手必备,看完绝对思路清晰。醍醐灌顶啊! 一. Struts2介绍 1. Struts2简介 2. Struts2和Struts1的常见区别 ...二. Struts2入门 ... 3. 快速配置Struts2环境 ... OGNL表达式 五. Struts2中常用标签

    struts2入门实例1

    OGNL表达式实现类型转换 9.Struts2_03_validate_review 输入校验 ————复习前面的 10.Struts2_04_validate_method ????????????? validateXXX方法校验得到的错误信息先显示出来,然后才是...

    struts2入门实例4 经典入门必备

    OGNL表达式实现类型转换 9.Struts2_03_validate_review 输入校验 ————复习前面的 10.Struts2_04_validate_method ????????????? validateXXX方法校验得到的错误信息先显示出来,然后才是...

    struts2入门实例3 经典入门必备

    OGNL表达式实现类型转换 9.Struts2_03_validate_review 输入校验 ————复习前面的 10.Struts2_04_validate_method ????????????? validateXXX方法校验得到的错误信息先显示出来,然后才是...

    struts2入门实例2 经典入门必备

    OGNL表达式实现类型转换 9.Struts2_03_validate_review 输入校验 ————复习前面的 10.Struts2_04_validate_method ????????????? validateXXX方法校验得到的错误信息先显示出来,然后才是...

    Struts2+Spring+Hibernate3.2+整合文档及事例程序.zip

    properties文件即i18n国际化多国语言版的用法,struts2前台校验,对输入的数据进行验证validators struts2 OGNL 表达式详解 struts2 #,*,%

    Struts 2.1.8_学习源码

    Struts2默认支持OGNL、JSTL、Groovy和Velcity表达式 Struts2_04ActionResultType : Struts2关于Action跳转类型的应用 对各种不同的跳转类型使用的实例 Struts2_05Interceptor : Struts2拦截器的使用 Struts2_06...

    struts2中ongl表达式的使用和具体实例应用

    ongl详细描述和标签,在描述的所有的OGNL的操作中,实际上,全部都忽略了OGNL内部帮助你完成的很多默认行为和类型转化方面的工作。

    struts2中OGNL使用源自javaWeb编程王者归来

    本实例:实现了用ongl取得servlet对象值;用ongl对集合中的对象进行筛选; 以及ongl表达式的显示生命

    研究论文-Struts2架构中的Commons-fileupload组件应用技术.pdf

    利用OGNL表达式提取Session持久层中的文件名,并利用此文件名实现下载文件的动态更名.灵活利用struts2.0自身提供的字段类型,提高下载的鲁棒性.并列举实例体现整合技术和动态文件下载的实用性,最后通过与以往2种...

    Struts2架构中的Commons-fileupload组件应用技术 (2011年)

    利用OGNL表达式提取Session持久层中的文件名,并利用此文件名实现下载文件的动态更名。灵活利用struts2.0自身提供的字段类型,提高下载的鲁棒性。并列举实例体现整合技术和动态文件下载的实用性,最后通过与以往2种常用...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    9.2 OGNL表达式语言 9.2.1 认识OGNL 9.2.2 Struts2框架中的OGNL 9.2.3 操作普通的属性与方法 9.2.4 访问静态方法与属性 9.2.5 访问数组 9.2.6 访问List、Set、M印集合 9.2.7 投影与选择 9.3 Struts2的标签库 9.3.1 ...

    低清版 大型门户网站是这样炼成的.pdf

    2.1.7 功能强大的表达式语言ognl 47 2.1.8 struts 2的运行流程分析—helloworld 48 2.1.9 struts 2的异常处理 52 2.2 struts 2配置精要 54 2.2.1 web.xml中struts 2的配置实现 54 2.2.2 struts 2属性配置文件...

    Java学习笔记-个人整理的

    {12.5}操作符与实例}{154}{section.12.5} {12.5.1}where}{154}{subsection.12.5.1} {12.6}函数}{156}{section.12.6} {12.7}组函数}{158}{section.12.7} {12.7.1}group by}{159}{subsection.12.7.1} {12.7.2}...

    freemarker总结

    上面的语法格式中,sequence就是一个集合对象,也可以是一个表达式,但该表达式将返回一个集合对象,而item是一个任意的名字,就是被迭代输出的集合元素.此外,迭代集合对象时,还包含两个特殊的循环变量: item_index:...

Global site tag (gtag.js) - Google Analytics