2016-06-22 15 views
3

私は今では検索を行う必要があるgrailsアプリケーションを持っています。私は共通の条件を含む閉鎖を作成しました。GrailsにはcreateCriteriaのクロージャが含まれています

def criteria = { 
     if(pageSize){ 
      delegate.maxResults(pageSize) 
     } 
     if(offset){ 
      delegate.firstResult(offset) 
     } 
    ........ 
} 

そして、私は、これは内部のいくつかの特定の条件

objects = DomainObkect.createCriteria().list { 

        ne "booleanCheck", true 
        eq "value", value 
        criteria 
       } 

単独基準を作成使用したいこれを有効にするには、方法はありますか?今の基準のオプションは

答えて

1

確かに、事前に

おかげで実行されていません。 何かのように:

Closure searchRestriction = { builder -> 
      if(pageSize){ 
       builder.maxResults(pageSize) 
      } 
      if(offset){ 
       builder.firstResult(offset) 
      } 
     } 
     def criteria = DomainObkect.createCriteria() 
     objects = criteria.list { 
      ne "booleanCheck", true 
      eq "value", value 
      searchRestriction(criteria) 
     } 
+1

を確認することができますブログのいくつかは、私は、デリゲートを使用して、まだこれを行うことができることができます方法はありますか? inside searchRestrictionドメインオブジェクトのnamedQueriesにもアクセスする必要があります – Visahan

+0

DetachedCriteriaを使用して検索クロージャを簡単に管理する方が良いでしょうか? DetachedCriteriaは、より柔軟性があり、通常の基準です。 http://docs.grails.org/latest/guide/GORM.html#detachedCriteria –

0

この質問はあなたがnamedqueriesを使用することができますし、あなたが同様のcriteriasを委任以前にも Reusing part of Grails criteria closure

頼まれます。あなたは http://www.tothenew.com/blog/grails-data-binding-criteria-reuse/ http://www.tothenew.com/blog/reusing-grails-criteria-for-multiple-domains-using-closure-delegate/

+0

私は、上記の方法を "criteria.delegate = delegate"& "criteria()"というリストメソッドの中に入れてみましたが、そうすることで、私は閉鎖の中で "delegate.inCountMethod"のような特定のメソッドを呼び出すことができません – Visahan