Jadual Kandungan
一、OGNL表达式
  1.简介
  2.使用OGNL准备工作
   2.1导包
   2.2代码准备
 
  3.基本语法演示
二、OGNL与Struts2的结合
  1.结合原理
  2.栈原理
  3.查看值栈中两部分内容(使用DEBUG标签)
   3.1Root
  3.2Context
   4.struts2与ognl结合体现
    4.1参数接收
    4.2配置文件中
  5.扩展:request对象的getAttribute方法
三、练习:客户列表
Rumah Java javaTutorial JAVA之:OGNL表达式练习

JAVA之:OGNL表达式练习

Jun 26, 2017 am 11:23 AM
javaee struts2 belajar ungkapan

一、OGNL表达式

 

  1.简介

  OGNL:对象视图导航语言.  ${user.addr.name} 这种写法就叫对象视图导航。
  OGNL不仅仅可以视图导航.支持比EL表达式更加丰富的功能。

 

  2.使用OGNL准备工作

   2.1导包

  struts2 的包中已经包含了.所以不需要导入额外的jar包

   2.2代码准备

  

    @Test//准备工作public void fun1() throws Exception{//准备OGNLContext//准备RootUser rootUser = new User("tom",18);//准备ContextMap<String,User> context = new HashMap<String,User>();
            context.put("user1", new User("jack",18));
            context.put("user2", new User("rose",22));
        OgnlContext oc = new OgnlContext();//将rootUser作为root部分        oc.setRoot(rootUser);//将context这个Map作为Context部分        oc.setValues(context);//书写OGNLOgnl.getValue("", oc, oc.getRoot());
    }
Salin selepas log masuk
准备工作

 

  3.基本语法演示

        //取出root中user对象的name属性String name = (String) Ognl.getValue("name", oc, oc.getRoot());
        Integer age = (Integer) Ognl.getValue("age", oc, oc.getRoot());
        System.out.println(name);
        System.out.println(age);
Salin selepas log masuk
取出root中的属性值
        //取出context中键为user1对象的name属性String name = (String) Ognl.getValue("#user1.name", oc, oc.getRoot());
        String name2 = (String) Ognl.getValue("#user2.name", oc, oc.getRoot());
        Integer age = (Integer) Ognl.getValue("#user2.age", oc, oc.getRoot());
        System.out.println(name);
        System.out.println(name2);
        System.out.println(age);
Salin selepas log masuk
取出context中的属性值
        //将root中的user对象的name属性赋值Ognl.getValue("name='jerry'", oc, oc.getRoot());
        String name = (String) Ognl.getValue("name", oc, oc.getRoot());
        
        String name2 = (String) Ognl.getValue("#user1.name='郝强勇',#user1.name", oc, oc.getRoot());
        System.out.println(name);
        System.out.println(name2);
Salin selepas log masuk
为属性赋值
        //调用root中user对象的setName方法Ognl.getValue("setName('lilei')", oc, oc.getRoot());
        String name = (String) Ognl.getValue("getName()", oc, oc.getRoot());
        String name2 = (String) Ognl.getValue("#user1.setName('lucy'),#user1.getName()", oc, oc.getRoot());
        
        System.out.println(name);
        System.out.println(name2);
Salin selepas log masuk
调用方法
        String name = (String) Ognl.getValue("@cn.itheima.a_ognl.HahaUtils@echo('hello 强勇!')", oc, oc.getRoot());//Double pi = (Double) Ognl.getValue("@java.lang.Math@PI", oc, oc.getRoot());Double pi = (Double) Ognl.getValue("@@PI", oc, oc.getRoot());
        System.out.println(name);
        System.out.println(pi);
Salin selepas log masuk
调用静态方法
        //创建list对象Integer size = (Integer) Ognl.getValue("{'tom','jerry','jack','rose'}.size()", oc, oc.getRoot());
        String name = (String) Ognl.getValue("{'tom','jerry','jack','rose'}[0]", oc, oc.getRoot());
        String name2 = (String) Ognl.getValue("{'tom','jerry','jack','rose'}.get(1)", oc, oc.getRoot());    /*System.out.println(size);
        System.out.println(name);
        System.out.println(name2);*///创建Map对象Integer size2 = (Integer) Ognl.getValue("#{'name':'tom','age':18}.size()", oc, oc.getRoot());
        String name3  = (String) Ognl.getValue("#{'name':'tom','age':18}['name']", oc, oc.getRoot());
        Integer age  = (Integer) Ognl.getValue("#{'name':'tom','age':18}.get('age')", oc, oc.getRoot());
        System.out.println(size2);
        System.out.println(name3);
        System.out.println(age);
Salin selepas log masuk
ognl创建对象-list|map

 

二、OGNL与Struts2的结合

 

  1.结合原理

  

  ValueStack中的两部分

  

 

  2.栈原理

  

  栈是由ArrayList模拟的

  

  栈中的两个方法的实现

  

  访问栈中属性的特点.由上到下

  

 

  3.查看值栈中两部分内容(使用DEBUG标签)

   3.1Root

  默认情况下,栈中放置当前访问的Action对象

  

  3.2Context

  

  

  Context部分就是ActionContext数据中心

 

   4.struts2与ognl结合体现

    4.1参数接收

     

  

    如何获得值栈对象,值栈对象与ActionContext对象是互相引用的

        //压入栈顶//1获得值栈ValueStack vs = ActionContext.getContext().getValueStack();//2将u压入栈顶vs.push(u);
Salin selepas log masuk

    4.2配置文件中

<action name="Demo3Action" class="cn.itheima.d_config.Demo3Action" method="execute" ><result name="success" type="redirectAction" ><param name="actionName">Demo1Action</param><param name="namespace">/</param><!-- 如果添加的参数struts"看不懂".就会作为参数附加重定向的路径之后.
                     如果参数是动态的.可以使用${}包裹ognl表达式.动态取值                 --><param name="name">${name}</param></result></action>
Salin selepas log masuk
语法:${ognl表达式}

 

  5.扩展:request对象的getAttribute方法

   查找顺序:

  

 

三、练习:客户列表

    public String list() throws Exception {//1 接受参数String cust_name = ServletActionContext.getRequest().getParameter("cust_name");//2 创建离线查询对象DetachedCriteria dc =DetachedCriteria.forClass(Customer.class);//3 判断参数拼装条件if(StringUtils.isNotBlank(cust_name)){
            dc.add(Restrictions.like("cust_name", "%"+cust_name+"%"));
        }//4 调用Service将离线对象传递List<Customer> list = cs.getAll(dc);//5 将返回的list放入request域.转发到list.jsp显示        //ServletActionContext.getRequest().setAttribute("list", list);// 放到ActionContextActionContext.getContext().put("list", list);        return "list";
    }
Salin selepas log masuk
Action代码(新增ActionContext存放数据)
<s:iterator value="#list" var="cust" >
    <TR         
        style="FONT-WEIGHT: normal; FONT-STYLE: normal; BACKGROUND-COLOR: white; TEXT-DECORATION: none">
        <TD>
            <s:property value="#cust.cust_name" />
        </TD>
        <TD>
        <s:property value="#cust.cust_level" />
        </TD>
        <TD>
        <s:property value="#cust.cust_source" />
        </TD>
        <TD>
        <s:property value="#cust.cust_linkman" />
        </TD>
        <TD>
        <s:property value="#cust.cust_phone" />
        </TD>
        <TD>
        <s:property value="#cust.cust_mobile" />
        </TD>
        <TD>
        <a href="${pageContext.request.contextPath }/customerServlet?method=edit&custId=${customer.cust_id}">修改</a>
          <a href="${pageContext.request.contextPath }/customerServlet?method=delete&custId=${customer.cust_id}">删除</a>
        </TD>
    </TR>
    </s:iterator>
    <%-- <s:iterator value="#list"  >
    <TR         
        style="FONT-WEIGHT: normal; FONT-STYLE: normal; BACKGROUND-COLOR: white; TEXT-DECORATION: none">
        <TD>
            <s:property value="cust_name" />
        </TD>
        <TD>
        <s:property value="cust_level" />
        </TD>
        <TD>
        <s:property value="cust_source" />
        </TD>
        <TD>
        <s:property value="cust_linkman" />
        </TD>
        <TD>
        <s:property value="cust_phone" />
        </TD>
        <TD>
        <s:property value="cust_mobile" />
        </TD>
        <TD>
        <a href="${pageContext.request.contextPath }/customerServlet?method=edit&custId=${customer.cust_id}">修改</a>
          <a href="${pageContext.request.contextPath }/customerServlet?method=delete&custId=${customer.cust_id}">删除</a>
        </TD>
    </TR>
    </s:iterator> --%>
Salin selepas log masuk
JSP显示数据的代码(注释的是另一种方法)

 注意: 每次都会把cust存在ActionContext中

 

Atas ialah kandungan terperinci JAVA之:OGNL表达式练习. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Belajar untuk menyahpasang pip sepenuhnya dan menggunakan Python dengan lebih cekap Belajar untuk menyahpasang pip sepenuhnya dan menggunakan Python dengan lebih cekap Jan 16, 2024 am 09:01 AM

Tidak perlu lagi pip? Datang dan pelajari cara menyahpasang pip dengan berkesan! Pengenalan: pip ialah salah satu alat pengurusan pakej Python, yang boleh memasang, menaik taraf dan menyahpasang pakej Python dengan mudah. Walau bagaimanapun, kadangkala kita mungkin perlu menyahpasang pip, mungkin kerana kita ingin menggunakan alat pengurusan pakej yang lain, atau kerana kita perlu mengosongkan sepenuhnya persekitaran Python. Artikel ini akan menerangkan cara menyahpasang pip dengan cekap dan memberikan contoh kod khusus. 1. Kaedah menyahpasang pip Berikut akan memperkenalkan dua kaedah biasa untuk menyahpasang pip.

Penyelaman mendalam ke dalam peta warna matplotlib Penyelaman mendalam ke dalam peta warna matplotlib Jan 09, 2024 pm 03:51 PM

Untuk mengetahui lebih lanjut tentang jadual warna matplotlib, anda memerlukan contoh kod khusus 1. Pengenalan matplotlib ialah perpustakaan lukisan Python yang berkuasa Ia menyediakan set fungsi dan alatan lukisan yang kaya yang boleh digunakan untuk mencipta pelbagai jenis carta. Peta warna (peta warna) ialah konsep penting dalam matplotlib, yang menentukan skema warna carta. Kajian mendalam tentang jadual warna matplotlib akan membantu kami menguasai fungsi lukisan matplotlib dengan lebih baik dan menjadikan lukisan lebih mudah.

Apakah prinsip rangka kerja Struts2 Apakah prinsip rangka kerja Struts2 Jan 04, 2024 pm 01:55 PM

Prinsip rangka kerja Struts2: 1. Pemintas menghuraikan laluan permintaan; menghurai. Prinsipnya adalah berdasarkan mekanisme pemintas, yang memisahkan sepenuhnya pengawal logik perniagaan daripada API Servlet, meningkatkan kebolehgunaan semula dan kebolehselenggaraan kod. Dengan menggunakan mekanisme refleksi, rangka kerja Struts2 boleh membuat dan mengurus objek Tindakan secara fleksibel untuk memproses permintaan dan respons.

Mendedahkan daya tarikan bahasa C: Mendedahkan potensi pengaturcara Mendedahkan daya tarikan bahasa C: Mendedahkan potensi pengaturcara Feb 24, 2024 pm 11:21 PM

Pesona Pembelajaran Bahasa C: Membuka Potensi Pengaturcara Dengan perkembangan teknologi yang berterusan, pengaturcaraan komputer telah menjadi satu bidang yang telah menarik perhatian ramai. Di antara banyak bahasa pengaturcaraan, bahasa C sentiasa digemari oleh pengaturcara. Kesederhanaan, kecekapan dan aplikasinya yang luas menjadikan pembelajaran bahasa C sebagai langkah pertama untuk ramai orang memasuki bidang pengaturcaraan. Artikel ini akan membincangkan daya tarikan mempelajari bahasa C dan cara membuka kunci potensi pengaturcara dengan mempelajari bahasa C. Pertama sekali, daya tarikan mempelajari bahasa C terletak pada kesederhanaannya. Berbanding dengan bahasa pengaturcaraan lain, bahasa C

Bermula dengan Pygame: Tutorial Pemasangan dan Konfigurasi Komprehensif Bermula dengan Pygame: Tutorial Pemasangan dan Konfigurasi Komprehensif Feb 19, 2024 pm 10:10 PM

Pelajari Pygame dari awal: tutorial pemasangan dan konfigurasi lengkap, contoh kod khusus diperlukan Pengenalan: Pygame ialah perpustakaan pembangunan permainan sumber terbuka yang dibangunkan menggunakan bahasa pengaturcaraan Python Ia menyediakan pelbagai fungsi dan alatan, membolehkan pembangun mencipta pelbagai jenis dengan mudah permainan. Artikel ini akan membantu anda mempelajari Pygame dari awal, dan menyediakan tutorial pemasangan dan konfigurasi yang lengkap, serta contoh kod khusus untuk membolehkan anda bermula dengan cepat. Bahagian Pertama: Memasang Python dan Pygame Pertama, pastikan anda mempunyai

Mari belajar cara memasukkan nombor akar dalam Word bersama-sama Mari belajar cara memasukkan nombor akar dalam Word bersama-sama Mar 19, 2024 pm 08:52 PM

Semasa mengedit kandungan teks dalam Word, anda kadangkala perlu memasukkan simbol formula. Sesetengah lelaki tidak tahu cara memasukkan nombor akar dalam Word, jadi Xiaomian meminta saya untuk berkongsi dengan rakan saya tutorial tentang cara memasukkan nombor akar dalam Word. Semoga membantu kawan-kawan. Mula-mula, buka perisian Word pada komputer anda, kemudian buka fail yang ingin anda edit, dan gerakkan kursor ke lokasi yang anda perlukan untuk memasukkan tanda akar, rujuk contoh gambar di bawah. 2. Pilih [Sisipkan], dan kemudian pilih [Formula] dalam simbol. Seperti yang ditunjukkan dalam bulatan merah dalam gambar di bawah: 3. Kemudian pilih [Insert New Formula] di bawah. Seperti yang ditunjukkan dalam bulatan merah dalam gambar di bawah: 4. Pilih [Radical], dan kemudian pilih radikal yang sesuai. Seperti yang ditunjukkan dalam bulatan merah dalam gambar di bawah:

Ketahui fungsi utama dalam bahasa Go dari awal Ketahui fungsi utama dalam bahasa Go dari awal Mar 27, 2024 pm 05:03 PM

Tajuk: Pelajari fungsi utama dalam bahasa Go dari awal Sebagai bahasa pengaturcaraan yang mudah dan cekap, bahasa Go digemari oleh pembangun. Dalam bahasa Go, fungsi utama ialah fungsi masuk, dan setiap program Go mesti mengandungi fungsi utama sebagai titik masuk program. Artikel ini akan memperkenalkan cara mempelajari fungsi utama dalam bahasa Go dari awal dan memberikan contoh kod khusus. 1. Pertama, kita perlu memasang persekitaran pembangunan bahasa Go. Anda boleh pergi ke laman web rasmi (https://golang.org

Sebarkan aplikasi JavaEE menggunakan Docker Containers Sebarkan aplikasi JavaEE menggunakan Docker Containers Jun 05, 2024 pm 08:29 PM

Gunakan aplikasi Java EE menggunakan bekas Docker: Cipta Fail Docker untuk mentakrifkan imej, bina imej, jalankan bekas dan petakan port, dan kemudian akses aplikasi dalam penyemak imbas. Contoh aplikasi JavaEE: REST API berinteraksi dengan pangkalan data, boleh diakses pada localhost selepas penggunaan melalui Docker.

See all articles