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}]]}]}}
相关推荐
6. **数组和列表初始化**:可以使用花括号`{}`来初始化数组或列表,如`new String[]{"a", "b", "c"}`。 7. **Map操作**:可以通过键来访问Map的值,如`map["key"]`。 ### OGNL表达式 OGNL表达式是OGNL的核心,它们...
`s:bean` 标签用于创建和初始化一个 Java bean,例如创建一个计数器: ```jsp counter: ``` 总的来说,`s:iterator` 标签结合 OGNL,使得在 Struts2 中处理和展示集合数据变得非常简单和灵活。...
在`PropertyTag`中,`doStartTag()`方法会初始化一些属性,如属性路径、转换器等,而`doEndTag()`方法则负责根据属性路径查找值,并将其输出到页面。这个过程中,OGNL表达式起到了关键作用,它能解析复杂的属性路径...
2. **变量与数据类型**:包括基本数据类型和引用数据类型的区别,以及作用域、生命周期和初始化。 3. **封装、继承和多态**:这是面向对象编程的三大特性,面试时会深入讨论它们的概念和实际应用。 4. **异常处理*...
Spring Bean 的生存周期有装载、初始化、使用、销毁四个阶段。 Spring 动态代理 Spring 动态代理有两种实现方式:Java 实现动态代理和 CGLib 实现动态代理。 AOP AOP 是面向切面编程,用于管理跨切面的业务逻辑...
- **实现方式**:如何初始化Logger对象。 - **8.1.6 为不同的Appender设置日志输出级别** - **实现方式**:如何为不同的Appender配置不同的日志级别。 - **8.1.7 为不同的包设置日志输出级别** - **实现方式**...
学习Java主要包括语法基础(如类、对象、接口、异常处理等)、集合框架(List、Set、Map)、多线程、I/O流、网络编程等内容。Java EE(企业版)则提供了用于构建服务器端应用程序的API和服务,如Servlet和JSP。 2. ...
- **封装数据到集合中**:可以将表单数据封装到`List`或`Map`中。 #### OGNL (Object-Graph Navigation Language) - **概述**:OGNL是一种强大的表达式语言,用于获取和设置Java对象的属性。它可以独立使用,但在...
- **类与对象**:理解面向对象编程的基本概念,如封装、继承和多态,以及如何创建和初始化对象。 - **异常处理**:掌握try-catch-finally语句块的使用,以及自定义异常的处理。 - **集合框架**:List、Set、Queue...
在模板里对sequences和hashes初始化 sequences 1. [“you”,”me”,”he”] 2. 1..100 3. [ {“Akey”:”Avalue”},{“Akey1”:”Avalue1”}, {“Bkey”:”Bvalue”},{“Bkey1”:”Bvalue1”}, ] hashes {“you”:...
- **功能**:用于创建并初始化一个JavaBean对象。 - **示例**: ```xml ``` ##### 18. `<s:date>`:日期格式化 - **功能**:显示日期,并指定日期格式。 - **示例**: ```xml ``` ##### 19. `...
查询出列表,也就是返回list, 在我们这个例子中也就是 List<User> , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的 ...
- 初始化阶段:执行类构造器`()`。 - **面试考察要点:** - 类加载器的种类及其工作原理。 - 双亲委派模型的意义。 **3.2 对象的创建过程** - **知识点概述:** - 分配内存。 - 初始化对象。 - 设置对象头...
{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} {...