博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2(九)OGNL标签一与Struts2标签
阅读量:7216 次
发布时间:2019-06-29

本文共 7739 字,大约阅读时间需要 25 分钟。

一、什么是OGNL

 Object Graph Navigation Language对象图导航语言。

是Struts2默认的表达式语言,开源,功能更强大。和EL表达式有点相似

存取对象的属性,调用对象的方法

访问静态方法,静态属性

访问值栈及Stack Context

支持赋值、运算操作、字段类型转化等。

二、简单例子

导入所需要的struts2的包

 web.xml增加struts2过滤器

struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
struts2
/*

实体类

package com.pb.entity;/* * 街道实体类 */public class Street {    private int streetId;            //街道ID    private String streetName;    //街道名称            public Street() {        super();        // TODO Auto-generated constructor stub    }    public Street(int streetId, String streetName) {        super();        this.streetId = streetId;        this.streetName = streetName;    }    public int getStreetId() {        return streetId;    }    public String getStreetName() {        return streetName;    }    public void setStreetId(int streetId) {        this.streetId = streetId;    }    public void setStreetName(String streetName) {        this.streetName = streetName;    }            }
package com.pb.entity;/* * 房子实体类 */public class Hourse {        private int hourseId;  //房屋ID    private String hourseName;    //房屋名称    private Street street;            //房屋所在街道            public Hourse() {        super();        // TODO Auto-generated constructor stub    }    public Hourse(int hourseId, String hourseName, Street street) {        super();        this.hourseId = hourseId;        this.hourseName = hourseName;        this.street = street;    }    public int getHourseId() {        return hourseId;    }    public String getHourseName() {        return hourseName;    }    public Street getStreet() {        return street;    }    public void setHourseId(int hourseId) {        this.hourseId = hourseId;    }    public void setHourseName(String hourseName) {        this.hourseName = hourseName;    }    public void setStreet(Street street) {        this.street = street;    }    }

HourseAction

package com.pb.web.action;import com.opensymphony.xwork2.ActionSupport;import com.pb.entity.Hourse;import com.pb.entity.Street;public class HourseAction extends ActionSupport {        private Hourse hourse;        @Override        public String execute() throws Exception {            //声明街道对象            Street street =new Street(001,"南新路");            hourse=new Hourse(11,"一房一厅",street);            return SUCCESS;        }        public Hourse getHourse() {            return hourse;        }        public void setHourse(Hourse hourse) {            this.hourse = hourse;        }                }

struts.xml

/ognl1.jsp

ognl1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %>
OGNL一房屋的名称:
房屋的街道名称:

在地址栏中输入

http://localhost:8080/OGNLDemo1/hourse.action

发生页面跳转,并取出其中的值

三、访问值栈中的值

 

四、访问List 、Map、Set

struts.xml

/ognllist.jsp

ognllistAction

package com.pb.web.action;import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;import com.opensymphony.xwork2.ActionSupport;import com.pb.entity.Street;public class OgnlAction extends ActionSupport {    /**     *      */    private static final long serialVersionUID = 1L;    private List
streetList; private Map
streetMap; private Set
streetSet; public List
getStreetList() { return streetList; } public void setStreetList(List
streetList) { this.streetList = streetList; } public Map
getStreetMap() { return streetMap; } public void setStreetMap(Map
streetMap) { this.streetMap = streetMap; } public Set
getStreetSet() { return streetSet; } public void setStreetSet(Set
streetSet) { this.streetSet = streetSet; } @Override public String execute() throws Exception { streetList=new ArrayList
(); streetList.add(new Street(1, "高新南一路")); streetList.add(new Street(2, "高新南二路")); streetList.add(new Street(3, "高新南三路")); streetMap=new HashMap
(); streetMap.put("k1", new Street(4, "高新南四路")); streetMap.put("k2", new Street(5, "高新南五路")); streetMap.put("k3", new Street(6, "高新南六路")); streetSet =new HashSet
(); streetSet.add(new Street(7, "高新南七路")); streetSet.add(new Street(8, "高新南八路")); streetSet.add(new Street(9, "高新南九路")); return SUCCESS; } }

jsp页页

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %>
OGNL一

List

访问List
访问List中第一个元素:
List中的大小:
List是否为空:
自定义集合List:
自定义集合List访问第一个元素:

Map

访问Map
访问Map中第一个元素:
|
访问Map 中所有key:
访问Map 中所有values:
Map中的大小:
Map是否为空:
自定义集合Map:
自定义集合Mapt访问第一个元素:
|

Set

访问Set
访问Set中第一个元素:
|
Set中的大小:
Set是否为空:

在页面中输入:http://localhost:8080/OGNLDemo1/ognl.action访问

五、访问静态方法和投影

 

5.1、访问静态方法和静态属性

package com.pb.demo;public class Demo {public final static String STR="STATIC STR";public static String staticMethod(){String info="Demo Static Method";return info;}}

在ognl2.jsp 中可以通过如下代码访问该类的静态属性以及静态方法:

<%@taglib uri="/struts-tags" prefix="s"%>
Insert title here

OGNL 对象图导航语言

调用静态方法:
调用静态常量:

struts.xml

//开启静态方法

其中<constant>常量你可以去default.properties 文件中查找并复制使用。

5.2、访问投影

选择就是过滤满足选择条件的集合元素。选择操作的语法是:collection.{X YYY},其中X

是一个选择操作符,后面则是选择用的逻辑表达式,而选择操作符有三种:
?选择满足条件的所有元素
^选择满足条件的第一个元素
$选择满足条件的最后一个元素

package com.pb.entity;/* * 用户名 */public class User {    private Integer age;    private String name;    private String pasword;    public User() {        super();        // TODO Auto-generated constructor stub    }    public User(String name, String pasword, Integer age) {        super();        this.name = name;        this.pasword = pasword;        this.age = age;    }    public Integer getAge() {        return age;    }    public String getName() {        return name;    }    public String getPasword() {        return pasword;    }    public void setAge(Integer age) {        this.age = age;    }    public void setName(String name) {        this.name = name;    }    public void setPasword(String pasword) {        this.pasword = pasword;    }}
package com.pb.web.action;import java.util.ArrayList;import java.util.List;import com.opensymphony.xwork2.ActionSupport;import com.pb.entity.User;public class UserAction extends ActionSupport {    private User user;    private List
users=new ArrayList
(); public User getUser() { return user; } public void setUser(User user) { this.user = user; } public List
getUsers() { return users; } public void setUsers(List
users) { this.users = users; } @Override public String execute() throws Exception { User u1 = new User(); u1.setName("zhangsan"); u1.setPasword("zhangsan"); u1.setAge(10); this.users.add(u1); User u2 = new User(); u2.setName("lisi"); u2.setPasword("lisi"); u2.setAge(23); this.users.add(u2); User u3 = new User(); u3.setName("wangwu"); u3.setPasword("wangwu"); u3.setAge(22); this.users.add(u3); return SUCCESS; } }

struts.xml

/ognl.jsp

jsp页面

<%@taglib prefix="s" uri="/struts-tags" %>
集合元素过滤:
集合元素过滤:
集合元素过滤:

转载地址:http://xatym.baihongyu.com/

你可能感兴趣的文章
Leetcode Pascal&#39;s Triangle II
查看>>
运行shell脚本报错 &#39;\357\273\277&#39;: command not found 解决的方法
查看>>
android studio 0.8.1使用和遇到问题解决
查看>>
云服务器ECS选购集锦之六区域选择帮助
查看>>
云虚机选购指南之二云虚拟主机试用帮助文档
查看>>
女友眼中的IT男
查看>>
Excel连接
查看>>
java基础-多线程学习
查看>>
WPF打印原理,自定义打印
查看>>
HTML5 5
查看>>
箭头css
查看>>
Python入门,以及简单爬取网页文本内容
查看>>
顺丰科技笔试回忆
查看>>
excel技巧
查看>>
通用防SQL注入漏洞程序(Global.asax方式)
查看>>
服务器进程为何通常fork()两次
查看>>
python中的logger模块
查看>>
9.3、理解作用域与全局变量
查看>>
ios序列化最终方案
查看>>
HttpMessageConverter 专题
查看>>