2014-11-03 2 views
0

я следующий класс доменаКаков наилучший способ создания фильтра критериев?

class Something { 
    User user 
    BigDecimal balance 
    Boolean cancelled 
    String status 
    Client client 
    Date dateCreated 
    Date lastUpdated 

    static constraints { ... } 

    ... 
} 

мне нужно создать фильтр для этого домена класса пользовательский интерфейс выглядит как этот

enter image description here

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

Благодаря

+2

Вы можете использовать несколько 'if' блоков внутри запроса критериев, основанных на соответствующих доступности элемента? – dmahapatro

+0

Я не знал, что могу использовать критерии ifs внутри. Это очень помогает – user615274

ответ

1

Я бы сделать это так

List<Something filter(Client client, String status, BigDecimal balance) (
    Something.withCriteria { 

    if (client) { 
     eq 'client', client 
    }  

    if (status) { 
     eq 'status', status 
    }  

    if (balance != null) { 
     eq 'balance', balance 
    }  

    // other predicates go here.... 
    } 
} 
+2

Как написано, будьте осторожны с непреднамеренным поведением, связанным с правкой Groovy. Например, если 'balance' равен 1, будут выполняться критерии' eq 'balance', balance', но если 'balance' равен 0, это не будет. Если ваше намерение состоит в том, чтобы запросить все 'Something', которые имеют« баланс »0, этот код не будет работать. –

+0

@JeffScottBrown спасибо, я обновил код, чтобы избежать этой проблемы –

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