struts.xml简单配置

  1. <!-- (默认false)设置ognl表达式是否支持静态方法 -->
  2. <constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
  3. <package name="ognl" namespace="/ognl" extends="struts-default">
  4. <action name="ognl" class="com.ouc.wkp.action.OgnlAction">
  5. <result>/ognl.jsp</result>
  6. </action>
  7. </package>

struts.xml

记得打开

<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>

  1. package com.ouc.wkp.action;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.HashSet;
  6. import java.util.List;
  7. import java.util.Map;
  8. import java.util.Set;
  9.  
  10. import org.apache.commons.chain.Catalog;
  11.  
  12. import com.opensymphony.xwork2.ActionSupport;
  13. import com.ouc.wkp.model.Cat;
  14. import com.ouc.wkp.model.Dog;
  15. import com.ouc.wkp.model.User2;
  16.  
  17. //user.xxx只有传,才会构造,想初始化domain model,可以自己new,也可以传参数值
  18. //但这时候要有参数为空的构造方法
  19. //
  20. public class OgnlAction extends ActionSupport {
  21. private String password;
  22. private String username;
  23. private User2 user;
  24. private Cat cat;
  25. private Map<String, Dog> dogMap = new HashMap<String, Dog>();
  26. private Set<Dog> dogs = new HashSet<Dog>();
  27. private List<User2> users = new ArrayList<User2>();
  28.  
  29. public Cat getCat() {
  30. return cat;
  31. }
  32.  
  33. public void setCat(Cat cat) {
  34. this.cat = cat;
  35. }
  36.  
  37. public User2 getUser() {
  38. return user;
  39. }
  40.  
  41. public void setUser(User2 user) {
  42. this.user = user;
  43. }
  44.  
  45. public String getPassword() {
  46. return password;
  47. }
  48.  
  49. public void setPassword(String password) {
  50. this.password = password;
  51. }
  52.  
  53. public String getUsername() {
  54. return username;
  55. }
  56.  
  57. public void setUsername(String username) {
  58. this.username = username;
  59. }
  60.  
  61. public Map<String, Dog> getDogMap() {
  62. return dogMap;
  63. }
  64.  
  65. public void setDogMap(Map<String, Dog> dogMap) {
  66. this.dogMap = dogMap;
  67. }
  68.  
  69. public Set<Dog> getDogs() {
  70. return dogs;
  71. }
  72.  
  73. public void setDogs(Set<Dog> dogs) {
  74. this.dogs = dogs;
  75. }
  76.  
  77. public List<User2> getUsers() {
  78. return users;
  79. }
  80.  
  81. public void setUsers(List<User2> users) {
  82. this.users = users;
  83. }
  84.  
  85. public OgnlAction() {
  86. users.add(new User2(1));
  87. users.add(new User2(2));
  88. users.add(new User2(3));
  89.  
  90. dogs.add(new Dog("dog1"));
  91. dogs.add(new Dog("dog2"));
  92. dogs.add(new Dog("dog3"));
  93.  
  94. dogMap.put("dog100", new Dog("dog100"));
  95. dogMap.put("dog101", new Dog("dog101"));
  96. dogMap.put("dog102", new Dog("dog102"));
  97. }
  98.  
  99. @Override
  100. public String execute() throws Exception {
  101. return SUCCESS;
  102. }
  103.  
  104. public String m() {
  105. return "mmmmm";
  106. }
  107. }

OgnlAction.java

  1. package com.ouc.wkp.model;
  2. //user.xxx只有传,才会构造,想初始化domain model,可以自己new,也可以传参数值
  3. //但这时候要有参数为空的构造方法
  4. public class User2 {
  5. private int age=8;
  6.  
  7. public int getAge() {
  8. return age;
  9. }
  10.  
  11. public void setAge(int age) {
  12. this.age = age;
  13. }
  14.  
  15. public User2(){
  16. // System.out.println("user constructor");
  17. }
  18.  
  19. public User2(int age){
  20. this.age=age;
  21. }
  22.  
  23. @Override
  24. public String toString() {
  25. return "user"+age;
  26. }
  27. }

User2.java

  1. package com.ouc.wkp.model;
  2.  
  3. public class Cat {
  4. private Dog friend;
  5.  
  6. public Dog getFriend() {
  7. return friend;
  8. }
  9.  
  10. public void setFriend(Dog friend) {
  11. this.friend = friend;
  12. }
  13.  
  14. public String miaomiao(){
  15. return "miaomiao";
  16. }
  17.  
  18. // public Cat(){
  19. //
  20. // }
  21. //
  22. // public Cat(Dog friend){
  23. // this.friend=friend;
  24. // }
  25. //
  26. // @Override
  27. // public String toString() {
  28. // return "cat"+friend;
  29. // }
  30. }

Cat.java

  1. package com.ouc.wkp.model;
  2.  
  3. public class Dog {
  4. private String name;
  5.  
  6. public String getName() {
  7. return name;
  8. }
  9.  
  10. public void setName(String name) {
  11. this.name = name;
  12. }
  13.  
  14. public Dog(){
  15.  
  16. }
  17.  
  18. public Dog(String name){
  19. super();
  20. this.name=name;
  21. }
  22.  
  23. @Override
  24. public String toString() {
  25. return "dog"+name;
  26. }
  27. }

Dog.java

然后就是比较核心的ognl.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%@ taglib uri="/struts-tags" prefix="s"%>
  3. <%
  4. String path = request.getContextPath();
  5. String basePath = request.getScheme() + "://"
  6. + request.getServerName() + ":" + request.getServerPort()
  7. + path + "/";
  8. %>
  9.  
  10. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  11. <html>
  12. <head>
  13. <base href="<%=basePath%>">
  14.  
  15. <title>My JSP 'ognl.jsp' starting page</title>
  16.  
  17. <meta http-equiv="pragma" content="no-cache">
  18. <meta http-equiv="cache-control" content="no-cache">
  19. <meta http-equiv="expires" content="0">
  20. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  21. <meta http-equiv="description" content="This is my page">
  22. <!--
  23. <link rel="stylesheet" type="text/css" href="styles.css">
  24. -->
  25.  
  26. </head>
  27.  
  28. <body>
  29. <s:debug></s:debug>
  30. This is ognl.jsp
  31. <br> 访问值栈中的action的普通属性:username=
  32. <s:property value="username" />
  33. <br /> 访问值栈中对象的普通属性(get set 方法)
  34. <s:property value="user.age" />
  35. <br /> 访问值栈中对象的普通属性(get set 方法)
  36. <s:property value="cat.friend.name" />
  37. <br /> 访问值栈中对象的普通方法
  38. <s:property value="password.length()" />
  39. <br /> 访问值栈中对象的普通方法
  40. <s:property value="cat.miaomiao()" />
  41. <br /> 访问静态方法:
  42. <s:property value="@com.ouc.wkp.action.S@s()" />
  43. <br /> 访问静态属性:
  44. <s:property value="@com.ouc.wkp.action.S@STR" />
  45. <br /> 访问Math类的静态方法:
  46. <s:property value="@@max(2,3)" />
  47. <br /> 访问普通类的构造方法:
  48. <s:property value="new com.ouc.wkp.model.User2(10)" />
  49. <br /> 访问List:
  50. <s:property value="users" />
  51. <br /> 访问List中某个元素:
  52. <s:property value="users[1]" />
  53. <br /> 访问List中元素某个属性的集合:
  54. <s:property value="users.{age}" />
  55. <br /> 访问List中元素某个属性的集合中的特定值:
  56. <s:property value="users.{age}[0]" />
  57. <br /> |
  58. <s:property value="users[0].age" />
  59. <br /> 访问Set:
  60. <s:property value="dogs" />
  61. <br /> 访问Set中某个元素:
  62. <s:property value="dogs[1]" />
  63. <br /> 访问Map:
  64. <s:property value="dogMap" />
  65. <br /> 访问Map中某个元素:
  66. <s:property value="dogMap.dog101" />
  67. <br /> |
  68. <s:property value="dogMap['dog101']" />
  69. <br /> |
  70. <s:property value="dogMap[\"dog101\"]" />
  71. <br /> 访问Map中所有的key:
  72. <s:property value="dogMap.keys" />
  73. <br /> 访问Map中所有的value:
  74. <s:property value="dogMap.values" />
  75. <br /> 访问容器的大小:
  76. <s:property value="dogMap.size()" />
  77. <br /> |
  78. <s:property value="users.size" />
  79. <br /> 投影(过滤):
  80. <s:property value="users.{?#this.age==1}[0]" />
  81. <br /> 投影:
  82. <s:property value="users.{^#this.age>1}.{age}" />
  83. <br /> 投影:
  84. <s:property value="users.{$#this.age>1}.{age}" />
  85. <br /> 投影:
  86. <s:property value="users.{$#this.age>1}.{age}==null" />
  87. <br /> []:
  88. value stack从上往下数<s:property value="[0].username" />
  89. </body>
  90. </html>

ognl.jsp

输入网址

http://localhost:8081/maShiBing/ognl/ognl?password=p&username=u&user.age=9&cat.friend.name=fuck

运行结果为

ongl 表达式的更多相关文章

  1. 对于EL表达式和ONGL表达式区别的相关理解

    java程序跑起来之后,会有一个内存空间分配出来,存入用到的值,这个值的周围就是上下文空间,而九大内置对象等,都在这个值的周围放着,像这样: el 就只能获取value stack 周围 的数据,va ...

  2. Struts2笔记——ONGL表达式语言

    OGNL是ObjectGraphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts 2框架使用OGNL作为默认的表达式语言. ----------- ...

  3. 表达式语言之ongl表达式

    OGNL的全称是Object Graph Navigation Language(对象图导航语言),它是一种强大的表达式语言,让你通过简单一致的表达式语法来读取和设置Java对象的属性值,调用对象的方 ...

  4. ongl表达式中得到对象,调用对象方法(OA项目权限显示模块)

    在用户是否拥有某项权限的问题  是这样解决的: 用户登录之后  登录信息是保存在session域中的  通过el表达式可得到登录的对象信息  那么怎样判断用户是否拥有某项权限呢 ?如果没有上图中的判断 ...

  5. JSTL、EL、ONGL、Struts标签的区别与使用

     一.JSTL 来源 我们使用JSP开发信息展现非常方便,也可嵌入java代码用来实现相关逻辑,但同样带来了很多问题: jsp维护难度增加 出事提示不明确,不容易提示 分工不明确等 解决上面的问题可以 ...

  6. ongl与Struts标签

    一.ONGL OGNL 的全称是“Object-Graph Navigation Language”,即对象图导航语言,它是一种功能强大的开源表达式语言.使用这种表达式语言可以通过某种表达式语法存取  ...

  7. Struts2搭建及利用OGNL表达式弹出计算器

    0x01 环境搭建 1.创建Struts2应用 创建一个动态网站项目 2.配置Tomcat启动环境 3.在WebContent目录下的WEB-INF文件夹中创建web.xml,Tomcat启动时会加载 ...

  8. struts2笔记(2)

    <context-param> <param-name>pattern</param-name> <param-value>yyyy-MM-dd hh: ...

  9. Struts2 源码分析——DefaultActionInvocation类的执行action

    本章简言 上一章讲到关于拦截器的机制的知识点,让我们对拦截器有了一定的认识.我们也清楚的知道在执行用户action类实例之前,struts2会先去执行当前action类对应的拦截器.而关于在哪里执行a ...

随机推荐

  1. Linux下diff使用简介

    diff用来比较两个文件的差异.首先构建两个相似的文件. Hello文件 world文件 使用diff -u  hello world > diff.txt,将两个文件的比对结果输入到diff. ...

  2. Quality Over Quantity: 更少一些,更好一些_第1页_福布斯中文网

    Quality Over Quantity: 更少一些,更好一些_第1页_福布斯中文网     Quality Over Quantity: 更少一些,更好一些    2013年04月09日     ...

  3. jstack命令使用

    概述 jstack可用于导出java运用程序的线程堆栈.其基本使用语法为: jstack [-l] pid -l 选项用于打印锁的额外信息. 使用演示样例 以下这段代码执行之后会出现死锁现象(由于线程 ...

  4. 怎么限制Google自己主动调整字体大小

    Google默认的字体大小是12px,当样式表中font-size<12px时,或者没有明白指定字体大小,则在chrome浏览器里字体显示是12px. 近期在写代码玩的时候,我也碰到了 在FF和 ...

  5. NSJSONSerialization(category)的一个扩展类

    .h文件 // // NSJSONSerialization+Manage.h // SVPullToRefreshDemo // // Created by Fuer on 14-7-4. // C ...

  6. Html分组标签

    <fieldset>    <legend>权限种类</legend></fieldset>

  7. gulp脚本编写方法

    建立一个gulpfile.js文件,内容直接抄gulp-htmlmin的readme: var gulp = require('gulp'); var htmlmin = require('gulp- ...

  8. IE 11 无法访问某些不兼容性视图的解决方法

    今天下午部署公司的项目时,用IE 11只能加载到JSP页面的静态元素,其中下拉文本框的信息获取不到, 后来,发现是IE 11不兼容的原因,于是,在菜单条“工具”——“兼容性视图设置”,将不兼容页面的网 ...

  9. 解决.Net MVC EntityFramework Json 序列化循环引用问题.

    以前都是到处看博客,今天小菜也做点贡献,希望能帮到大家. 废话不多说,直接进入正题. 用过.net MVC的同学应该都被json序列化报循环引用错误这个问题骚扰过.网上有一些解决办法,但是都治标不治本 ...

  10. vsvim _vsvimrc 设置(转)

    c_joewang的专栏 (转) vsvim安装到vs2010后可以使用绝大部分原生vim的编辑功能,包括宏录制,也可以通过配置设置键盘映射,关于支持的编辑功能等可以参考上面链接去查看相关文档. Vi ...