OGNL 对象图导航语言

 OGNL是从ActionContext中获取数据的。
    
    ActionContext的结构:
        ValueStack:
            List:动作类放在此处。取存放在ValueStack中的root的对象的属性,直接写即可
            
            访问以下内容中的对象要使用#+(范围)session, 还有 列出的所有的#加上key属性取出值
        application:ServletContext中的那个Map
        session:HttpSession中的那个Map
        request:ServletRequest中的那个Map
        parameters:请求参数的那个Map。(如同EL表达式的paramValues内置对象)
        attr:相当于PageContext的findAttribute方法。${username}
    小技巧:在页面中使用<s:debug/>查看上下文中的对象
        <s:property value="[0].userName"/>    省略[0].就是取第一个Action实例动作的userName
        <s:property value="#session.user"/>
EL表达式会先在四大域顺序找值,如果找不到去ValueStack中找值,struts2实现了这一内容
    ${requestScope.userName} el表达式在request中搜索,找不到去value Stack中寻找搜索

    <c:property value="#request.userName" />      request中搜索,找不到去value Stack中寻找搜索

 ognl表达式的投影功能

?:获得所有符合逻辑的元素。

^获得符合逻辑的第一个元素

$获得符合逻辑的最后一个元素

例如<s:iterator value="books.{?#this.price>35}">

  <s:property value="title"/><s:property value="price"/><br/>

</s:iterator>



<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>利用OGNL表达式创建集合</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
    <s:set var="list1" value='{"a","b","c"}'></s:set><br/><!-- 默认放到了ActionContext上下文件中,scope="action" -->
    <s:set var="list2" value="{'aa','bb','cc'}" scope="session"/>
    <s:iterator value="#session.list2" var="l">
        <s:property value="#l"/><br/>
    </s:iterator>
    <hr/>
    <s:property value="#list1[1]"/>
    
    <hr/>
    <s:set var="map1" value="#{'a':'valuea','b':'valueb'}" scope="session"/>
    <!-- 打印valueb -->
    <s:iterator value="#session.map1" var="me">
        <s:property value="#me.key"/>=<s:property value="#me.value"/><br/>
    </s:iterator><!-- 作用如同forEach  -->
    
    <hr/>
    <c:forEach items="${sessionScope.map1}" var="me">
        ${me.key }=${me.value }<br/>
    </c:forEach>
    <hr/>
    
    <s:if test="'aaa' not in {'aa','bb'}">
        不在
    </s:if>
    
    <s:debug></s:debug>
   
  </body>
</html>



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值