本文主要是介绍ongl、ValueStack,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Ognl.setValue(String expr, Object obj, Object value) 与 Ognl.getValue(String expr, Object obj)执行规则:
上面两个函数都不支持以“#”开头的ognl表达式。
以Ognl.getValue(“a.b.myFunction()”, obj)为例,执行规则如下:
- 如果obj实现map接口:obj.get(“a”)
- 如果obj不实现map接口:obj.getA()/isA()
返回的对象又根据上面的规则来执行get(“b”)或getB()/isB(),接着返回的对象执行myFunction()函数。
对应的,Ognl.setValue(“a.b.myFunction().d”, obj, value)的执行规则开始时与上面一样,到最后一步时:
- 如果当前对象实现map接口则执行 put(“d”,value)
- 如果当前对象不实现map接口则执行 setD(value)
正规的代码一个类不应该既有getA()方法又有isA()方法,所以我就没测试若这两个方法都有会执行哪个了。
Ognl.getValue(String expr, Map map, Object obj)执行规则:
如果expr以“#”开头,执行Ognl.getValue(expr.substring(1), map),否则执行Ognl.getValue(expr, obj)。
ValueStack实际上就是一个容器。它由Struts框架创建,当前端页面如jsp发送一个请求时,Struts的默认拦截器会将请求中的数据进行封装,并入ValueStack的栈顶。
这篇关于ongl、ValueStack的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!