我可以使用OGNL动态创建对象并设置属性吗?

时间:2013-03-16 17:43:22

标签: java xml struts2 ognl

我正在开发一个系统,用于将收到的结构化消息动态映射到Java对象。目前我通过XML模式执行此操作,该模式具有以下典型格式:

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

因此,收到的消息具有分层结构,该结构映射到特定的域对象属性。因此,对于上述内容,我将消息元素root/config/component/param1映射到域属性MyObject.myAttr

我已经开发了代码来执行此操作,但在阅读了Struts2及其对OGNL的使用后,似乎它正在做同样的事情。 我的问题是,OGNL能否动态构建必要的对象,然后填充所有必要的属性?如果是这样,那怎么办?从阅读API文档开始,您似乎必须自己构建对象。例如,如果我使用像这样的OGNL表达式

rootObj.childObj.param1

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

1 个答案:

答案 0 :(得分:1)

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