2

我正在开发一个系统,用于将接收到的结构化消息动态映射到 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 服务构造 object rootObjchildObj然后是 set attribute param1。这正是 Struts 将 Http 请求参数传递给域对象所做的事情,因此动态对象的创建必须在某处进行。然而,在对 OGNL 表达式进行了一些试验之后,没有发生对象创建,并且我得到了空对象异常。

4

1 回答 1

1

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

于 2013-03-16T17:59:46.190 回答