Черная магия в привязке данных Grails? - PullRequest
0 голосов
/ 08 апреля 2010

Как описано в http://n4.nabble.com/Grails-Data-Binding-for-One-To-Many-Relationships-with-REST-tp1754571p1754571.html Я пытаюсь автоматически связать мои REST-данные.

Теперь я понимаю, что для связей «один ко многим» карта, необходимая для привязки данных, должна иметь список идентификаторов множества сторон, например:

[propName: propValue, manyAssoc: [1, 2]]

Однако я получаю это исключение

Executing action [save] of controller [com.example.DomainName]  caused exception: org.springframework.orm.hibernate3.HibernateSystemException: IllegalArgumentException occurred calling getter of com.example.DomainName.id; nested exception is org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.example.DomainName.id

Однако, еще более странным является действие обновления, которое генерируется для контроллера. Там у нас есть привязка данных вот так:

domainObjectInstance.properties = params['domainObject']

Но, и это действительно странная вещь, params ['domainObject'] равен нулю! Он нулевой, потому что все поля domainObject передаются непосредственно в самой карте параметров. Если я изменю вышеприведенную строку на

domainObjectInstance.properties = null

domainObject все еще обновляется! Почему это происходит и что более важно, как я могу автоматически связать свой входящий XML, если он приходит в этом формате (проблема в связях «один ко многим»):

<product>
  <name>Table</name>
  <brand id="1" />
  <categories>
    <category id="1" />
    <category id="2" />
  </categories>
</product> 

1 Ответ

0 голосов
/ 08 апреля 2010

Это не на 100% ясно из вашего примера - каково содержимое ваших «параметров» при попытке связать.

Если у вас не определены «postObject.xxx = yyy» параметры записитогда в параметрах ничего не будет ['domainObject'].Подобное пространство имен в большинстве случаев не является обязательным, и для использования префикса требуются поля формы.

Я предполагаю, что ваши данные отображаются как "xxx = yyy", а не "domainObject.xxx = yyy".

Кроме того, я не уверен, что [1,2] для ассоциаций также подходит.Конечно, это должно быть [id: 1, id: 2]?

...