ognl表达式

struts2中的OGNl表达式
OGNL全称是Object-Graph Navigation Language(对象图形导航语言),相对于EL语言,除了保持EL语言的优点外,他的其他优点如下:

  • 能够访问对象的普通方法
  • 能够访问类的静态属性和静态方法
  • 强大的操作集合类对象的能力
  • 支持赋值操作和表达式串联
  • 访问OGNL上下文和ActionContext

使用ognl表达式还能获取其他值,这些值并不需要存放进作用域中,而是放到值栈中

<!-- 一进来就把其他页面加载进来,相当于c:include -->
    <s:action name="testognl" executeResult="true" namespace="/"/>
访问属性<s:property value="temp"/>
    访问action普通方法:<s:property value="show()"/>
    访问非action静态方法<s:property value="@com.sxt.po.User@show()"/>
    操作list集合:
        <s:set name="typeList" value="{'aaa','bbb','ccc'}"/>
        <s:select list="#typeList"/>
        集合数量:<s:property value="#typeList.size()"/>
        操作map集合:设置键值对,可以给option设置value值
            <s:set name="typemap" value="#{1:'aaa',2:'bbb',3:'ccc' }"/>
            <s:select list="#typemap"></s:select>
        相当于:            
        <select>
            <option value="1">aaa</option>
            <option value="2">bbb</option>
            <option value="3">ccc</option>
        </select>

    把数组放到复选框中提供选择<s:checkboxlist list="houstList" name=""/>

使用迭代器,把集合中的数据输出
<s:if test="houstList!=null && houstList.size()>0">
    <s:iterator status="vs" value="houstList" var="house">
        <s:property value="#house.title"/>
    </s:iterator>
</s:if>

使用迭代器,把数组中的数据输出
<s:if test="fileName!=null && fileName.length>0">

<s:iterator value="fileName" status="file">
    <!--  第一种方式:<s:property value="fileName[#file.index]"/> -->
    <img alt="" src="upload/images/<s:property value="fileName[#file.index]"/>" width="300px" height="300px"/>
    <!--  第二种方式:<s:property> -->
    <a href="upload/benxi_download.sxt?fileName=<s:property/>">下载</a>
    <hr>
</s:iterator>
</s:if>
<s:else>没有值</s:else>

    过滤/投影
    查询房屋信息(租金价格>900)  {?#this.price>900}.{title}输出所有的
    <s:property value="houselist.{?#this.price>900}[0].{title}"/>   
    第一个符合要求的
    <s:property value="houselist.{^#this.price>900}"/>  
    最后一个符合要求的
    <s:property value="houselist.{$#this.price>900}"/> 


    获得参数值:<s:property value="#parameters.temp[0]"/>
    运算:<s:property value="age+1"/>

    <s:if test="houselist!=null&&houselist.size()>0">
    正在出租的房屋:
        <s:iterator value="houselist" var="house" status="vs">
            <s:property value="#vs.count"/>
            <s:property value="#house.title"/>
            <s:property value="#house['price']"/>
            日期:<s:property value="#house.addDate"/>
                <s:date name="#house.addDate" format="yyyy年MM月dd日"/>
        </s:iterator>
    </s:if>
    <s:else>没有房屋出租</s:else>

    <!-- 查看值栈中的数据 -->
    <s:debug/>

对应的java文件

public String execute() throws Exception {
        //设置数据,并存放进作用域当中
        User user = new User();
        user.setName("benxi");
        user.setAge(26);
        ActionContext.getContext().getSession().put("user", user);
        //模拟房屋集合
        House house1=new House(100, "靓房出租1", "大气上档次", new BigDecimal(500), new BigDecimal(120), "12497080343",new java.sql.Date(System.currentTimeMillis()));
        House house2=new House(101, "靓房出租2", "大气上档次", new BigDecimal(800), new BigDecimal(130), "12497080344",new java.sql.Date(System.currentTimeMillis()));
        House house3=new House(102, "靓房出租3", "大气上档次", new BigDecimal(5200), new BigDecimal(140), "12497080345",new java.sql.Date(System.currentTimeMillis()));
        House house4=new House(103, "靓房出租4", "大气上档次", new BigDecimal(5300), new BigDecimal(150), "12497080346",new java.sql.Date(System.currentTimeMillis()));
        House house5=new House(104, "靓房出租5", "大气上档次", new BigDecimal(5400), new BigDecimal(160), "12497080347",new java.sql.Date(System.currentTimeMillis()));

        houselist=new ArrayList<House>();
        houselist.add(house1);
        houselist.add(house2);
        houselist.add(house3);
        houselist.add(house4);
        houselist.add(house5);
        return this.SUCCESS;
    }

其他省略

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值