Struts2 Learner03

OGNL
Object graphic Navgation language 对象图形的导航语言

org.zttc.itat.model下面三个class
Department.class
Role.class
User.class

package org.zttc.itat.model;
public class User//两个构造函数
{
private int id;
private String username;
private String nickname;
private Department dep;
//以上成员变量全部都有get和set方法

//method
public int sum(int a, int b)
{
return a + b;
}

public String hello(String word)
{
return "hello" + word;
}
}
----------------------------------------------------------------------------
package org.zttc.itat.model;
public class Department
{
private String name;
//get and set
}
}
-----------------------------------------------------------------------------
package org.zttc.itat.model;

/**
* Created by Melody on 2015/11/7.
*/
public class Role
{
private int id;
private String name;
//构造函数和get set方法
}
-----------------------------------------------------------------------------
Test
package org.zttc.itat.test;
import ognl.Ognl;
import ognl.OgnlException;
import org.junit.Test;
import org.zttc.itat.model.*;
import java.util.*;

public class TestOngl
{
@Test
public void test01() throws OgnlException
{
User u = new User(1, "tangseng", "唐僧");
Department dep = new Department("财务处");
u.setDep(dep);

//第二个参数是root
System.out.println(Ognl.getValue("nickname", u));//唐僧

//从u里面找dep dep里面找name
System.out.println(Ognl.getValue("dep.name", u));//财务处
}

@Test
public void test02() throws OgnlException
{
Map<String, Object> ctx = new HashMap<String, Object>();
User u = new User(1, "tangseng", "唐僧");
Department dep = new Department("财务处");
u.setDep(dep);

Role r = new Role(1, "Admin");
ctx.put("user", u);
ctx.put("role", r);

//想找根u里面的对象
//没加# 是在root中找 加了#是在ctx中找
System.out.println(Ognl.getValue("username", ctx, u));//唐僧

//想找ctx里面的对象 #user.username是在ctx这个map中找
//ctx是一个map{"user", u} (String, Object)
//ActionContext.getContext()是一个map 所以后面也要加#
System.out.println(Ognl.getValue("#user.username", ctx, u));//唐僧
System.out.println(Ognl.getValue("#role.name", ctx, u));//Admin

//Ogn其实就是一个最大的Context,根的key就是root 所以可以根据#root.***来取
//所有东西有个最大的根context(map)里面有个root里面放的是u
System.out.println(Ognl.getValue("#root.username", ctx, u));//
}

@Test
public void test03() throws OgnlException
{
List<User> users = new ArrayList<User>();
users.add(new User(1, "ts", "唐僧"));
users.add(new User(2, "ss", "沙僧"));
users.add(new User(3, "bj", "八戒"));
users.add(new User(4, "wk", "悟空"));

//如果要取list中的元素 需要通过#root[index] 来完成取值
System.out.println(Ognl.getValue("#root[1].nickname", users));//沙僧

//看到没有 ognl还可以完成方法的调用
System.out.println(Ognl.getValue("#root[0].sum(1, 3)", users));//沙僧

//访问了u的hello(Stirng) 方法 注意里面的String要加‘‘
User u = new User();
System.out.println(Ognl.getValue("hello(‘world‘)", u));

//可以通过List(java的集合)中的中get()方法获取某个下标的对象 然后完成导航
System.out.println(Ognl.getValue("get(0).username", users));
/*
沙僧
4
helloworld
ts
*/
}

}
时间: 2024-11-09 08:36:40

Struts2 Learner03的相关文章

解决myeclipse中struts2 bug问题包的替换问题

因为struts2的bug问题,手工替换还是比较麻烦,但即便是最新的myeclipse2014也没有替换最新的struts2包,研究了一天,终于找到了解决办法.以下就解决方法与大家分享一下. 1.在perferences中找到 Myeclipse->Project Libraries,右边找到 struts2.1 Libraries,点击 Enable advanced configiguration,去掉以下文件前面的对勾,然后点击 Add custom Jars 2.在弹出的对话框中选择 A

【Struts2】SSH如何返回JSON数据

  在开发中我们经常遇到客户端和后台数据的交互,使用比较多的就是json格式了.在这里以简单的Demo总结两种ssh返回Json格式的数据 项目目录如下 主要是看 上图选择的部分 WebRoot里面就是平常的配置 第一种方法是使用com.google.gson.Gson 将对象转化为Json字符串  (gson-1.6.jar) 主要的代码如下 1 package com.javen.tool; 2 3 import java.io.IOException; 4 import java.io.P

struts2 版本所导致的 Filter 不同

过了好久又重新接触Struts2,使用maven直接获取的struts2-core-2.5.1的包,从网上直接copy了一段web.xml中的Filter,结果报错,struts2.3.x  以后用以下配置: 1 <filter> 2 <filter-name>struts2</filter-name> 3 <filter-class> 4 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExe

Struts2学习第三课 访问Web资源

1.什么是WEB资源? HttpServletRequest,HttpSession,ServletContext等原生的Servlet API. 2.为什么访问WEB资源? B/S的应用的Controller中必然需要访问WEB资源,例如,向域对象中读写属性,读写Cookie,获取realPath等等. 3.如何访问? 在Action中,可以通过一下方式访问web的HttpSession,HttpServletRequest,HttpServletResponse等资源 与Servlet AP

struts2+hibernate+spring简单整合且java.sql.SQLException: No suitable driver 问题解决

最近上j2ee的课,老师要求整合struts2+hibernate+spring,我自己其实早早地有准备弄的,现在都第9个项目了,无奈自己的思路和头绪把自己带坑了,当然也是经验问题,其实只是用myeclipse进行整合的,本来也没那么多问题,看视频吧居然好多要手打,我不喜欢看不下去放弃了,教程把就是一堆坑,最最让人不解的是明明有一个冲突是需要解决的,但我看到的教程居然都没有提到,还有一个错误居然好多人都好像自动忽略一样,能解决我问题的都是要漫长的找,所以我一定一定要把这个过程记录下来,给第一次搞

SSH Struts2+hiberante+Spring整合

使用SSH框架编写学生信息: 一.新建Java工程: (1)建立好Java各层级之间的结构:业务处理层dao,数据模型层domain,页面请求处理层(Struts2 MVC层)action,service层. (2)建立好各层的实现类及接口; (3)建立一个source folder文件夹,用来存放一些配置问价. (4)改变字节码生成的位置,改为WEB-INF下面的classes文件夹下. Java工程层级结构如下图: 二.hibernate整合到Spring容器中 步骤: 1.编写domain

Struts2 中的值栈的理解

通过对struts2的一段时间的接触,将自己对OGNL的核心值栈说说,值栈:简单的说,就是存放action的堆栈,当我们提交一个请求道服务器端 action时,就有个堆栈,如果action在服务器端进行跳转,所有action共用一个堆栈,当需要保存在action中的数据时,首先从栈顶开始 搜索,若找到相同的属性名(与要获得的数据的属性名相同)时,即将值取出,但这种情况可能出现找到的值不是我们想要的值,那么解决此问题需要用TOP语法 和N语法来进行解决. 当在客服端进行跳转时,当有请求提交到服务器

struts2和hibernate整合的小Demo

jar包下载地址 创建一个web项目. 导入jar包 配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="

配置struts2+spring,springmvc

Struts2+Spring整合 一.spring负责注入,struts2负责它自己的工作.这样不是很符合spring作为ioc容器的全部功能,不推荐. 二.spring负责全部bean和struts2的action的生成.作为ioc容易的最大共用. 所需要jar包 配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/