Сделать joda.DateTime доступным для поиска свойством в Grails - PullRequest
0 голосов
/ 25 января 2011

Я использую библиотеку времени joda в моем проекте grails.Я установил плагин для поиска.У меня есть несколько доменов, но самый важный сейчас:

import org.joda.time.DateTime

class Entry {

     static searchable = {
     except = ['id', 'version']
     spellCheck "include"
     tags component: true

     title boost: 2.0
        dateCreated boost: 2.0
     }

 String title
 String content
 DateTime dateCreated
 DateTime lastUpdated

}

Но при инициализации я вижу следующую ошибку:

Невозможно отобразить [Entry.dateCreated].Он не отображается для подходящего «доступного для поиска свойства» (обычно это простые типы, такие как строки, даты, числа и т. Д.), «Доступного для поиска ссылки» (обычно это другой класс домена) или «доступного для поиска компонента» (обычно это другой класс домена, определенный как компонент,используя «встроенную» декларацию).Это производное свойство (метод получения без эквивалентного поля), определенное с помощью 'def'?Попробуйте определить его с более конкретным типом возвращаемого значения

Мой вопрос: возможно ли сделать свойства dateCreated и / или lastUpdated доступными для поиска в grails?Если возможно, как это можно сделать?

Спасибо.


РЕДАКТИРОВАТЬ

Если бы я должен был определить собственный конвертер в моем config.groovy следующим образом:

Map compassSettings = ['compass.converter.funkyConverter.type ':' com.acme.compass.converter.FunkyConverter ']

Что тогда определяется в классе FunkyConverter?

1 Ответ

1 голос
/ 25 июля 2011

Версия компаса, поставляемая с версией 0.6 Searchable (любые, возможно, более ранние версии), содержала специальный код (в классе org.compass.core.converter.DefaultConverterLookup) для класса org.joda.time.DateTime.,Я не могу напрямую сказать, работает ли он или нет, но похоже, что он попытается автоматически использовать org.compass.core.converter.extended.DataTimeConverter, включенный в Compass для класса DateTime joda.

Однако для классов joda LocalDate и LocalTime встроенной поддержки не было.Недавнее исправление ошибки в Searchable версии 0.6.1 (http://jira.grails.org/browse/GPSEARCHABLE-28) наряду с использованием конфигурации registerClass в Searchable.groovy, показанной ниже, исправило мое «Это не похоже на подходящее« доступное для поиска свойство »..."проблема, возникающая при запуске приложения во время создания экземпляров объектов домена в Bootstrap.groovy.

compassSettings = [
    "compass.converter.jodatime.type": "net.streamrecorder.web.converter.LocalTimeConverter",
    "compass.converter.jodatime.registerClass": "org.joda.time.LocalTime"
]

Обратите внимание, что net.streamrecorder.web.converter.LocalTimeConverter является моим собственным созданием.Я смоделировал это после org.compass.core.converter.extended.DataTimeConverter.В этой разнице есть также конвертер для LocalDate, указанный в билете GPSEARCHABLE-28: (http://jira.grails.org/secure/attachment/15729/0001-Nasty-fixes-and-workarounds-for-adding-custom-compas.patch) И, конечно, вам все равно нужно указать конвертер для переменной-члена домена в своем доменном классе, как описано здесь:(http://grails.org/Searchable+Plugin+-+Converters)

...