`
lizhensan
  • 浏览: 377323 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

利用ognl 初始化数据(map 套list|map)

    博客分类:
  • java
 
阅读更多
public static class MyNullHandler implements NullHandler {

		@SuppressWarnings("rawtypes")
		public Object nullMethodResult(Map context, Object target,
				String methodName, Object[] args) {
			System.err.println("==");
			return null;
		}

		public String getFullExp(Node node) {

			if (node.jjtGetParent() == null)
				return node.toString();
			else
				return getFullExp(node.jjtGetParent());

		}

		@SuppressWarnings({ "rawtypes", "unchecked" })
		public Object nullPropertyValue(Map context, Object target,
				Object property) {

			Object currentObj = null;

			OgnlContext ctx = (OgnlContext) context;
			ASTProperty currentNode = (ASTProperty) ((ASTConst) ctx
					.getCurrentNode()).jjtGetParent();
			String fullExp = getFullExp(currentNode);
			String prefix = "";
			if (isFirstNode(currentNode))
				prefix = currentNode + "[";
			else
				prefix = currentNode.jjtGetParent() + "[";
			if (fullExp.startsWith(prefix))
				currentObj = new MyList();
			else
				currentObj = new HashMap();

			if (target instanceof HashMap) {
				((HashMap) target).put(property, currentObj);
			}

			if (target instanceof List) {
				((List) target).add((Integer) property, currentObj);
			}
			return currentObj;
		}

		class MyList extends ArrayList {
			@Override
			public Object get(int index) {
				try {
					return super.get(index);
				} catch (Exception e) {
					return null;
				}
			}
		}

	}

 

@Test
	public void testAutoCreateMapAndList() {
		try {
			final OgnlExpressionEvaluator ee = new OgnlExpressionEvaluator();
			OgnlRuntime.setNullHandler(Object.class, new MyNullHandler());
			Map<String, Object> root = new HashMap<String, Object>();
			ee.setValue(root, root, "root.bar[0].name", "mike", true);
			ee.setValue(root, root, "root.bar[0].id", "001", true);

			// 手动初始化
			// List list = (List) ((Map) root.get("root")).get("bar");
			// Map m = new HashMap();
			// list.add(1, m);
			// m.put("name", "hzl");
			// m.put("id", "003");

			ee.setValue(root, root, "root.bar[1].name", "lizhs", true);
			ee.setValue(root, root, "root.bar[1].id", "002", true); 
			ee.setValue(root, root, "root.bar[1].dep[0][0].name", "研发部门", true);
			ee.setValue(root, root, "root.bar[1].dep[0][1].name", "测试部门", true);
			ee.setValue(root, root, "root.bar[1].dep[1][0].name", "研发部门2", true);
			ee.setValue(root, root, "root.bar[1].dep[1][1].name", "测试部门2", true);

			// Object findValue = ee.findValue("a.b.c", root,
			// root);
			// System.out.println(findValue);

			System.out.println(root);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

 

{root={bar=[{id=001, name=mike}, {id=002, name=lizhs, dep=[[{name=研发部门}, {name=测试部门}], [{name=研发部门2}, {name=测试部门2}]]}]}}

 

分享到:
评论

相关推荐

    ognl guide

    6. **数组和列表初始化**:可以使用花括号`{}`来初始化数组或列表,如`new String[]{"a", "b", "c"}`。 7. **Map操作**:可以通过键来访问Map的值,如`map["key"]`。 ### OGNL表达式 OGNL表达式是OGNL的核心,它们...

    struts2中siterator 标签的使用详解 及 OGNL用法.docx

    `s:bean` 标签用于创建和初始化一个 Java bean,例如创建一个计数器: ```jsp counter: ``` 总的来说,`s:iterator` 标签结合 OGNL,使得在 Struts2 中处理和展示集合数据变得非常简单和灵活。...

    struts2.0标签使用源码

    在`PropertyTag`中,`doStartTag()`方法会初始化一些属性,如属性路径、转换器等,而`doEndTag()`方法则负责根据属性路径查找值,并将其输出到页面。这个过程中,OGNL表达式起到了关键作用,它能解析复杂的属性路径...

    2014 java servet jdbc struts struts2面试题

    2. **变量与数据类型**:包括基本数据类型和引用数据类型的区别,以及作用域、生命周期和初始化。 3. **封装、继承和多态**:这是面向对象编程的三大特性,面试时会深入讨论它们的概念和实际应用。 4. **异常处理*...

    SSH框架部分常见面试题.pdf

    Spring Bean 的生存周期有装载、初始化、使用、销毁四个阶段。 Spring 动态代理 Spring 动态代理有两种实现方式:Java 实现动态代理和 CGLib 实现动态代理。 AOP AOP 是面向切面编程,用于管理跨切面的业务逻辑...

    Struts2学习文档

    - **实现方式**:如何初始化Logger对象。 - **8.1.6 为不同的Appender设置日志输出级别** - **实现方式**:如何为不同的Appender配置不同的日志级别。 - **8.1.7 为不同的包设置日志输出级别** - **实现方式**...

    java私人学习笔记

    学习Java主要包括语法基础(如类、对象、接口、异常处理等)、集合框架(List、Set、Map)、多线程、I/O流、网络编程等内容。Java EE(企业版)则提供了用于构建服务器端应用程序的API和服务,如Servlet和JSP。 2. ...

    传智播客struts2框架2016版视频教程笔记

    - **封装数据到集合中**:可以将表单数据封装到`List`或`Map`中。 #### OGNL (Object-Graph Navigation Language) - **概述**:OGNL是一种强大的表达式语言,用于获取和设置Java对象的属性。它可以独立使用,但在...

    java面试题

    - **类与对象**:理解面向对象编程的基本概念,如封装、继承和多态,以及如何创建和初始化对象。 - **异常处理**:掌握try-catch-finally语句块的使用,以及自定义异常的处理。 - **集合框架**:List、Set、Queue...

    freemarker总结

    在模板里对sequences和hashes初始化 sequences 1. [“you”,”me”,”he”] 2. 1..100 3. [ {“Akey”:”Avalue”},{“Akey1”:”Avalue1”}, {“Bkey”:”Bvalue”},{“Bkey1”:”Bvalue1”}, ] hashes {“you”:...

    Struts2标签使用

    - **功能**:用于创建并初始化一个JavaBean对象。 - **示例**: ```xml ``` ##### 18. `&lt;s:date&gt;`:日期格式化 - **功能**:显示日期,并指定日期格式。 - **示例**: ```xml ``` ##### 19. `...

    springmybatis

    查询出列表,也就是返回list, 在我们这个例子中也就是 List&lt;User&gt; , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的 ...

    java最新面试宝典

    - 初始化阶段:执行类构造器`()`。 - **面试考察要点:** - 类加载器的种类及其工作原理。 - 双亲委派模型的意义。 **3.2 对象的创建过程** - **知识点概述:** - 分配内存。 - 初始化对象。 - 设置对象头...

    Java学习笔记-个人整理的

    {1.10.2}数组变量的初始化}{34}{subsection.1.10.2} {1.10.3}数组对象的引用}{35}{subsection.1.10.3} {1.10.4}数组对象的复制}{35}{subsection.1.10.4} {1.10.5}扩充数组对象长度}{36}{subsection.1.10.5} {...

Global site tag (gtag.js) - Google Analytics