Получение имен свойств компонентов в Grails

Я пытаюсь написать тег, который будет отображать свойства моего компонента и соответствующие значения. Я хочу, чтобы поведение по умолчанию отображало все свойства компонента. Поэтому мне нужно каким-то образом получить все имена свойств из переданного компонента.

Я подумал, что могу использовать карту properties, но, несмотря на свойства bean-компонента, есть и другие вещи, и мне придется управлять ими вручную, что может быть подвержено ошибкам.

Я также подумал об использовании DefaultGrailsDomainClass, который удобен для доменных классов, но бесполезен для командных объектов.

Вы когда-нибудь делали что-то подобное и придумали что-то полезное?


person jjczopek    schedule 03.07.2011    source источник
comment
Вы смотрели на плагин bean-fields? Похоже, вы пытаетесь повторно реализовать некоторые из его функций.   -  person Dónal    schedule 04.07.2011
comment
Да, я сделал. Одна вещь, которая отличается от того, что я пытаюсь сделать, от bean-fields, заключается в том, что я хочу отображать все свойства сразу, просто передавая объект тегу. В bean-fields вы должны явно указать, какие свойства отображать.   -  person jjczopek    schedule 04.07.2011


Ответы (2)


Как сказано здесь, также есть persistentProperties. Но я считаю, что вам нужно GrailsDomainClass.properties - не путайте с Groovy properties, первые относятся к классу домена.

Для отрисовки GrailsDomainClassProperty.naturalName тоже будет полезно.

person Victor Sergienko    schedule 03.07.2011
comment
Так что пока я собираюсь сузить функциональность и разрешить только рендеринг bean-компонентов и использовать GrailsDomainClass. Может быть, когда-нибудь я попробую сделать его доступным для командных объектов. - person jjczopek; 03.07.2011
comment
Команда не боб BTW - я узнал об этом в последнее время. Может быть, вы можете просто использовать Class.declaredFields/declaredMethods для них. - person Victor Sergienko; 04.07.2011

Я сделал нечто подобное, используя properties, без проблем. Мой код был:

value.properties.entrySet().each { Map.Entry it ->
    println "$it.key = $it.value"  
}
person Igor Artamonov    schedule 03.07.2011
comment
Я знаю, что это возможно, но в таком случае мне приходится вручную опускать такие записи, как метакласс, переходные процессы, класс и некоторые другие. Кроме того, если есть отношения, я должен управлять ими вручную. - person jjczopek; 03.07.2011
comment
О, я понял. В моем случае это не требовалось - person Igor Artamonov; 03.07.2011