zoukankan      html  css  js  c++  java
  • struts2对ognl表达式的使用(配图解加讲解)

    ognl它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,它旨在提供一个更高的更抽象的层次来对Java对象图进行导航。

     

    先看一张示意图

     

     

     

    如果是下面的除了第一种valueStack的下面几种类型我们的方式就要用#号,如有一个request的属性我们就是这么用 #request.req  就相当于request.getAttribute("req");

     

    下面我们做一个实例:

    首先写一个Test.JAVA

    package com.fish;

     

    import java.util.ArrayList;

    import java.util.List;

     

     

     

    publicclass Test {

    String myname;

    List<Person> list;

     

     

     

    public List<Person> getList() {

        returnlist;

    }

     

    publicvoid setList(List<Person> list) {

        this.list = list;

    }

     

    public String getMyname() {

        returnmyname;

    }

     

    publicvoid setMyname(String myname) {

        this.myname = myname;

    }

     

    public String execute(){

       list=new ArrayList<Person>();

       list.add(new Person("张三",12));

       list.add(new Person("张四",13));

       list.add(new Person("张五",14));

       list.add(new Person("张流",15));

        return"success";

    }

    }

    里面有个person类,里面只有nameage属性就不写了。接着是strut.s.Xml

    <?xmlversion="1.0"encoding="UTF-8"?>

    <!DOCTYPEstruts PUBLIC

        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

        "http://struts.apache.org/dtds/struts-2.0.dtd">

     

    <struts>

     

      <packagename="fish"namespace="/test"extends="struts-default">

      <actionname="redfish"class="com.fish.Test"method="execute">

      <paramname="myname">sadasd</param>//这里对myname进行赋值,说一下,如果不用ognal获取myname的值的话,如果在这里赋值和在execute方法赋值都赋值的话,在页面会显示这里赋的值,用了ognl的话,页面会显示在execute里面赋给的值。

      <resultname="success">/index.jsp</result>

      </action>

      </package>

     

    </struts>

    我们写index.JSP文件

    <%

            request.setAttribute("req","这是一个请求");

            request.getSession().setAttribute("sess","这是一个会话");

           

        %>

     

        <s:propertyvalue="#request.req"/><br>   这就是对rquest属性的操作格式

        <s:propertyvalue="#session.sess"/><br>

        <s:propertyvalue="myname"/><br>    这个不加#号是因为这个属性会直接到ognl上下文中,然后直接读值

     

        <s:setvar="lists"value="{'aq','bw','ce'}"></s:set>//这是list的使用方法。List集合用{}表示

        <s:iteratorvalue="#lists"><br>   //利用迭代器显示值

            <s:property/>                //如果里面不说value则是默认的输出

        </s:iterator>

     

        <s:setvar="maps"value="#{'ycy':'aaa','yaku':'bbb'}">//这是map的使用方法

    Map集合用#{‘键’:‘值’}

        </s:set>

        <s:iteratorvalue="#maps">                  //利用迭代器

            <s:propertyvalue="key"/>=<s:propertyvalue="value"/><br>//有了value就具体读值

        </s:iterator>

     

        <s:iftest="fish in {'fish1','yaku'}" >//这是是判断标签,意思是说fish在这个集合里面吗。显然里面没有就会显示不在

        <br></s:if>

        <s:else>

        不在<br></s:else>

     

        <s:iteratorvalue="list.{?#this.age>10}"//这是对Test.Java里面的集合的读取。所以直接在ognl上下文中,所以不用#{?#this.age>10}是选出年龄大于10的记录。只是想想告诉有挑选功能,但是一般这些数据在数据库中,数据一般在数据库里面就已经选择处理过的,所以struts赋值遍历就行了。

        <s:propertyvalue="name"/><br>//直接写list对象的属性,不用跟着对象.属性

        </s:iterator>

    我们看看页面的结果:

  • 相关阅读:
    C语言-if语句
    C语言-表达式
    C语言-基础
    Java for LeetCode 187 Repeated DNA Sequences
    Java for LeetCode 179 Largest Number
    Java for LeetCode 174 Dungeon Game
    Java for LeetCode 173 Binary Search Tree Iterator
    Java for LeetCode 172 Factorial Trailing Zeroes
    Java for LeetCode 171 Excel Sheet Column Number
    Java for LeetCode 169 Majority Element
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3194033.html
Copyright © 2011-2022 走看看