• 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>

    我们看看页面的结果:

  • 相关阅读:
    全选和选项交互
    无法将类型为excel.applicationclass的com 强制转换为接口类型的解决方法[转]
    SilverLight搭建WCF聊天室详细过程[转]
    进程与线程的一个简单解释
    Visiual Studio CLR20r3
    C#注册表操作类--完整优化版
    cmd注册外部命令
    C# Dsofile.dll无法注册运行问题解决
    .net版,微信免充值代金卷业务开通验收代码
    C#十进制与任意进制的转换
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3194033.html
Copyright © 2020-2023  润新知