2013-03-16 71 views
2

我正在开发一个系统,用于将收到的结构化消息动态映射到Java对象。目前我通过一个XML模式,它具有以下典型格式这样做:我可以使用OGNL动态创建对象并设置属性吗?

<mapping> 
    <domainObject>company.app.MyObject</domainObject> 
    <attribute> 
    <domainAttribute>myAttr</domainAttribute> 
    <messageAttribute>root/config/component/param1</messageAttribute> 
    </attribute> 
</mapping> 

所以接收报文的层次结构,它映射到特定的域对象的属性。因此,针对上述情况,我映射消息元素root/config/component/param1MyObject.myAttr

我已经开发的代码要做到这一点域属性,但阅读的Struts2及其使用OGNL后,就好像它做同样的事情。 我的问题是,OGNL可以动态构造必要的对象,然后填充所有必要的属性?如果是这样,那是怎么做的?从阅读API文档看来,您必须自己构建对象。例如,如果我使用OGNL表达式这样

rootObj.childObj.param1 

理想我希望OGNL服务来构造对象rootObj,随后childObj,然后设置属性param1。这正是Struts将Http请求参数传递到域对象所做的,因此动态对象创建必须在某处发生。然而,在对OGNL表达式进行了一些尝试之后,没有发生对象创建,并且我得到空对象异常。

回答

1

OGNL不会构造你的对象。它主要用于最终评估表达式。创建对象是您或使用ObjectFactory创建对象的框架的责任。

相关问题