ongl 表达式
struts.xml简单配置
- <!-- (默认false)设置ognl表达式是否支持静态方法 -->
- <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
- <package name="ognl" namespace="/ognl" extends="struts-default">
- <action name="ognl" class="com.ouc.wkp.action.OgnlAction">
- <result>/ognl.jsp</result>
- </action>
- </package>
struts.xml
记得打开
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
- package com.ouc.wkp.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 org.apache.commons.chain.Catalog;
- import com.opensymphony.xwork2.ActionSupport;
- import com.ouc.wkp.model.Cat;
- import com.ouc.wkp.model.Dog;
- import com.ouc.wkp.model.User2;
- //user.xxx只有传,才会构造,想初始化domain model,可以自己new,也可以传参数值
- //但这时候要有参数为空的构造方法
- //
- public class OgnlAction extends ActionSupport {
- private String password;
- private String username;
- private User2 user;
- private Cat cat;
- private Map<String, Dog> dogMap = new HashMap<String, Dog>();
- private Set<Dog> dogs = new HashSet<Dog>();
- private List<User2> users = new ArrayList<User2>();
- public Cat getCat() {
- return cat;
- }
- public void setCat(Cat cat) {
- this.cat = cat;
- }
- public User2 getUser() {
- return user;
- }
- public void setUser(User2 user) {
- this.user = user;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public Map<String, Dog> getDogMap() {
- return dogMap;
- }
- public void setDogMap(Map<String, Dog> dogMap) {
- this.dogMap = dogMap;
- }
- public Set<Dog> getDogs() {
- return dogs;
- }
- public void setDogs(Set<Dog> dogs) {
- this.dogs = dogs;
- }
- public List<User2> getUsers() {
- return users;
- }
- public void setUsers(List<User2> users) {
- this.users = users;
- }
- public OgnlAction() {
- users.add(new User2(1));
- users.add(new User2(2));
- users.add(new User2(3));
- dogs.add(new Dog("dog1"));
- dogs.add(new Dog("dog2"));
- dogs.add(new Dog("dog3"));
- dogMap.put("dog100", new Dog("dog100"));
- dogMap.put("dog101", new Dog("dog101"));
- dogMap.put("dog102", new Dog("dog102"));
- }
- @Override
- public String execute() throws Exception {
- return SUCCESS;
- }
- public String m() {
- return "mmmmm";
- }
- }
OgnlAction.java
- package com.ouc.wkp.model;
- //user.xxx只有传,才会构造,想初始化domain model,可以自己new,也可以传参数值
- //但这时候要有参数为空的构造方法
- public class User2 {
- private int age=8;
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public User2(){
- // System.out.println("user constructor");
- }
- public User2(int age){
- this.age=age;
- }
- @Override
- public String toString() {
- return "user"+age;
- }
- }
User2.java
- package com.ouc.wkp.model;
- public class Cat {
- private Dog friend;
- public Dog getFriend() {
- return friend;
- }
- public void setFriend(Dog friend) {
- this.friend = friend;
- }
- public String miaomiao(){
- return "miaomiao";
- }
- // public Cat(){
- //
- // }
- //
- // public Cat(Dog friend){
- // this.friend=friend;
- // }
- //
- // @Override
- // public String toString() {
- // return "cat"+friend;
- // }
- }
Cat.java
- package com.ouc.wkp.model;
- public class Dog {
- private String name;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public Dog(){
- }
- public Dog(String name){
- super();
- this.name=name;
- }
- @Override
- public String toString() {
- return "dog"+name;
- }
- }
Dog.java
然后就是比较核心的ognl.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%@ taglib uri="/struts-tags" prefix="s"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme() + "://"
- + request.getServerName() + ":" + request.getServerPort()
- + path + "/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP 'ognl.jsp' starting page</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css">
- -->
- </head>
- <body>
- <s:debug></s:debug>
- This is ognl.jsp
- <br> 访问值栈中的action的普通属性:username=
- <s:property value="username" />
- <br /> 访问值栈中对象的普通属性(get set 方法)
- <s:property value="user.age" />
- <br /> 访问值栈中对象的普通属性(get set 方法)
- <s:property value="cat.friend.name" />
- <br /> 访问值栈中对象的普通方法
- <s:property value="password.length()" />
- <br /> 访问值栈中对象的普通方法
- <s:property value="cat.miaomiao()" />
- <br /> 访问静态方法:
- <s:property value="@com.ouc.wkp.action.S@s()" />
- <br /> 访问静态属性:
- <s:property value="@com.ouc.wkp.action.S@STR" />
- <br /> 访问Math类的静态方法:
- <s:property value="@@max(2,3)" />
- <br /> 访问普通类的构造方法:
- <s:property value="new com.ouc.wkp.model.User2(10)" />
- <br /> 访问List:
- <s:property value="users" />
- <br /> 访问List中某个元素:
- <s:property value="users[1]" />
- <br /> 访问List中元素某个属性的集合:
- <s:property value="users.{age}" />
- <br /> 访问List中元素某个属性的集合中的特定值:
- <s:property value="users.{age}[0]" />
- <br /> |
- <s:property value="users[0].age" />
- <br /> 访问Set:
- <s:property value="dogs" />
- <br /> 访问Set中某个元素:
- <s:property value="dogs[1]" />
- <br /> 访问Map:
- <s:property value="dogMap" />
- <br /> 访问Map中某个元素:
- <s:property value="dogMap.dog101" />
- <br /> |
- <s:property value="dogMap['dog101']" />
- <br /> |
- <s:property value="dogMap[\"dog101\"]" />
- <br /> 访问Map中所有的key:
- <s:property value="dogMap.keys" />
- <br /> 访问Map中所有的value:
- <s:property value="dogMap.values" />
- <br /> 访问容器的大小:
- <s:property value="dogMap.size()" />
- <br /> |
- <s:property value="users.size" />
- <br /> 投影(过滤):
- <s:property value="users.{?#this.age==1}[0]" />
- <br /> 投影:
- <s:property value="users.{^#this.age>1}.{age}" />
- <br /> 投影:
- <s:property value="users.{$#this.age>1}.{age}" />
- <br /> 投影:
- <s:property value="users.{$#this.age>1}.{age}==null" />
- <br /> []:
- value stack从上往下数<s:property value="[0].username" />
- </body>
- </html>
ognl.jsp
输入网址
http://localhost:8081/maShiBing/ognl/ognl?password=p&username=u&user.age=9&cat.friend.name=fuck
运行结果为
ongl 表达式的更多相关文章
- 对于EL表达式和ONGL表达式区别的相关理解
java程序跑起来之后,会有一个内存空间分配出来,存入用到的值,这个值的周围就是上下文空间,而九大内置对象等,都在这个值的周围放着,像这样: el 就只能获取value stack 周围 的数据,va ...
- Struts2笔记——ONGL表达式语言
OGNL是ObjectGraphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts 2框架使用OGNL作为默认的表达式语言. ----------- ...
- 表达式语言之ongl表达式
OGNL的全称是Object Graph Navigation Language(对象图导航语言),它是一种强大的表达式语言,让你通过简单一致的表达式语法来读取和设置Java对象的属性值,调用对象的方 ...
- ongl表达式中得到对象,调用对象方法(OA项目权限显示模块)
在用户是否拥有某项权限的问题 是这样解决的: 用户登录之后 登录信息是保存在session域中的 通过el表达式可得到登录的对象信息 那么怎样判断用户是否拥有某项权限呢 ?如果没有上图中的判断 ...
- JSTL、EL、ONGL、Struts标签的区别与使用
一.JSTL 来源 我们使用JSP开发信息展现非常方便,也可嵌入java代码用来实现相关逻辑,但同样带来了很多问题: jsp维护难度增加 出事提示不明确,不容易提示 分工不明确等 解决上面的问题可以 ...
- ongl与Struts标签
一.ONGL OGNL 的全称是“Object-Graph Navigation Language”,即对象图导航语言,它是一种功能强大的开源表达式语言.使用这种表达式语言可以通过某种表达式语法存取 ...
- Struts2搭建及利用OGNL表达式弹出计算器
0x01 环境搭建 1.创建Struts2应用 创建一个动态网站项目 2.配置Tomcat启动环境 3.在WebContent目录下的WEB-INF文件夹中创建web.xml,Tomcat启动时会加载 ...
- struts2笔记(2)
<context-param> <param-name>pattern</param-name> <param-value>yyyy-MM-dd hh: ...
- Struts2 源码分析——DefaultActionInvocation类的执行action
本章简言 上一章讲到关于拦截器的机制的知识点,让我们对拦截器有了一定的认识.我们也清楚的知道在执行用户action类实例之前,struts2会先去执行当前action类对应的拦截器.而关于在哪里执行a ...
随机推荐
- Linux下diff使用简介
diff用来比较两个文件的差异.首先构建两个相似的文件. Hello文件 world文件 使用diff -u hello world > diff.txt,将两个文件的比对结果输入到diff. ...
- Quality Over Quantity: 更少一些,更好一些_第1页_福布斯中文网
Quality Over Quantity: 更少一些,更好一些_第1页_福布斯中文网 Quality Over Quantity: 更少一些,更好一些 2013年04月09日 ...
- jstack命令使用
概述 jstack可用于导出java运用程序的线程堆栈.其基本使用语法为: jstack [-l] pid -l 选项用于打印锁的额外信息. 使用演示样例 以下这段代码执行之后会出现死锁现象(由于线程 ...
- 怎么限制Google自己主动调整字体大小
Google默认的字体大小是12px,当样式表中font-size<12px时,或者没有明白指定字体大小,则在chrome浏览器里字体显示是12px. 近期在写代码玩的时候,我也碰到了 在FF和 ...
- NSJSONSerialization(category)的一个扩展类
.h文件 // // NSJSONSerialization+Manage.h // SVPullToRefreshDemo // // Created by Fuer on 14-7-4. // C ...
- Html分组标签
<fieldset> <legend>权限种类</legend></fieldset>
- gulp脚本编写方法
建立一个gulpfile.js文件,内容直接抄gulp-htmlmin的readme: var gulp = require('gulp'); var htmlmin = require('gulp- ...
- IE 11 无法访问某些不兼容性视图的解决方法
今天下午部署公司的项目时,用IE 11只能加载到JSP页面的静态元素,其中下拉文本框的信息获取不到, 后来,发现是IE 11不兼容的原因,于是,在菜单条“工具”——“兼容性视图设置”,将不兼容页面的网 ...
- 解决.Net MVC EntityFramework Json 序列化循环引用问题.
以前都是到处看博客,今天小菜也做点贡献,希望能帮到大家. 废话不多说,直接进入正题. 用过.net MVC的同学应该都被json序列化报循环引用错误这个问题骚扰过.网上有一些解决办法,但是都治标不治本 ...
- vsvim _vsvimrc 设置(转)
c_joewang的专栏 (转) vsvim安装到vs2010后可以使用绝大部分原生vim的编辑功能,包括宏录制,也可以通过配置设置键盘映射,关于支持的编辑功能等可以参考上面链接去查看相关文档. Vi ...