2015-01-09 3 views
0

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

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

Заранее спасибо

ответ

0

Наконец я решил пойти с

MyClass.metaClass.properties.find { it.name == params.searchedColName } 

Я думаю, что это немного лучшее решение, чем предложение @Andrew von Dollen, так как я избегаю играть с весенним контекстом ... чувствую, что это более привлекательно.

1

Каждый объект Grails домена имеет впрыскивается domainClass свойство, которое выставляет persistentProperties список. Вы можете получить доступ к списку свойств таким образом:

def o = new MyDomain() 
o.domainClass.persistentProperties 

Вы также можете получить этот список из контекста Spring приложения, что позволяет избежать необходимости экземпляра класса домена. Среди компонентов Spring, созданных для каждого класса домена (четыре компонента для каждого домена), есть тот, который имеет полное имя вашего класса домена с суффиксом {{DomainClass}}. Предполагая, что grailsApplication был введен:

grailsApplication.mainContext.getBean("MyDomainDomainClass").persistentProperties 

В persistentProperties списке, вы можете искать недвижимость с указанным именем следующим образом:

persistentProperties.find { it.name == nameToSearchFor } 
+0

Я думаю, что список не лучшая структура для поиска ... возможно, мне нужно перебрать все элементы, проверяющие имя? ... карта была бы гораздо более дружелюбной. Документация утверждает, что [Entity] .properties отвечает Map, но я думаю, что это неправильно или что-то, потому что я не получаю эту карту. – Rafael

+0

Также вы используете экземпляр, в то время как я предпочитаю использовать класс ... есть ли что-то для этой проверки с использованием метакласса или что-то вроде этого? – Rafael

+1

См. Отредактированный ответ –

Смежные вопросы