2014-02-18 2 views
0

Я использую плагин grails easygrid.Grails easygrid plugin filter by toString()

ownerGrid { 
      dataSourceType 'gorm' 
      domainClass Owner 
      gridImpl 'dataTables' 
      fixedColumns true 
      columns { 
       room 
       { label "owner.room.label" 
        type 'text' 
        value {owner->owner.room.toString()} 
        filterClosure { filter -> 
         room { 
           ilike(...., "%${filter.paramValue}%") 
         } 
        } 
       } 

Я не знаю много о том, как критерии построены в Грааль, но я хотел бы сравнить значение ToString() класса номера.

Как я могу это достичь?

Благодаря

ответ

1

Предполагаю, что объект домена «Комната» имеет своеобразное свойство имени (которое вы бы использовали в методе toString).

Или, если это сложнее, вы, вероятно, генерируете toString из 2 или более столбцов. В этом случае вы можете использовать: Gorm derived properties. Назовем это производное свойство: «производное имя». Вот как выглядит ваша сетка:

ownerGrid { 
     dataSourceType 'gorm' 
     domainClass Owner 
     gridImpl 'dataTables' 
     fixedColumns true 
     columns { 
      room { 
       label "owner.room.label" 
       type 'text' 
       property owner.room.derivedName 
       filterClosure { filter -> 
        room { 
         ilike('derivedName', "%${filter.paramValue}%") 
        } 
       } 
      } 
     } 
    } 
+1

Спасибо, это именно то, что я хочу. если я хочу, чтобы производное имя было именем Hotel.name + RoomType.name, возможно ли это, или я могу получить только идентификатор из SQL? –

+0

Я думаю, это зависит. Является ли RoomType перечислением? Как вы храните его в db? – tudor

0

Это не работает таким образом ... если вы не сохраните вывод toString() метода в дополнительном свойстве вашего Owner DC, так что вы можете запустить запрос против него. Хотя это плохая идея во многих аспектах