2011-05-24 52 views
2

您好我現在用的是Grails filter plugin使Grails的冬眠過濾器

我試圖定義一個默認的過濾器,如下

// Defined inside the Book entity 
static hibernateFilters = { 
    activeFilter(condition:'active=1', default:true) 
} 

運行我的集成測試過濾器不適用於動態取景器的方法,如

Book.findAll() 

如果我添加下面一行在BootStrap.groovy中類

Book.enableHibernateFilter('activeFilter') 

然後應用過濾器。

然而,當應用程序被運行過濾器從未施加,有或沒有BootStrap.groovy中

任何想法上面的代碼?

解決這個小挖之後是什麼,我已經找到

的休眠過濾器插件,效果很好沒有zkgrails插件然而這兩種似乎無法一起工作:(

下面的代碼片段似乎是。對我來說,我認爲我們可以在這裏兩個問題

1)問題

開始執行到達
所有(控制器:」 ',動作:'')

在應用程序啓動期間只有一次。我認爲每次有新的請求時都應該到達那裏,因此需要新的會話。

2)即使某些修改之後莫名其妙地到達那裏,我不認爲它會得到過去 所有(控制器:「」,行動:「」)

作曲家在zkoss

使用
class HibernateFilterFilters { 

    def filters = { 
     all(controller:'*', action:'*') { 
      before = { 
       def session = grailsApplication.mainContext.sessionFactory.currentSession 
       DefaultHibernateFiltersHolder.defaultFilters.each {name -> 
        session.enableFilter(name) 
       } 
      } 
      after = { 

      } 
      afterView = { 

      } 
     } 
    } 

} 

回答

1

我身邊一個小挖想出了一個解決辦法的上述問題後

我基本上擴展GrailsOpenSessionInViewFilter類

public class OpenSessionInViewFilterExt extends GrailsOpenSessionInViewFilter{ 
@Override 
protected Session getSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException { 
    Session session = super.getSession(sessionFactory); 
    for (Object filterName : DefaultHibernateFiltersHolder.getDefaultFilters()) { 
     session.enableFilter((String) filterName); 
    } 
    return session; 
} 

}

我也有在web.xml

<filter> 
     <filter-name>OpenSessionInViewFilterExt</filter-name> 
     <filter-class>com.nthdimenzion.hibernate.ext.OpenSessionInViewFilterExt</filter-class> 
</filter> 


<filter-mapping> 
    <filter-name>OpenSessionInViewFilterExt</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

每一個新的會話創建過濾器啓用該功能默認時間進入現在。我認爲這應該工作,但是在zkgrails插件或使兩者可以共存於一個單一的應用程序:)休眠過濾插件

由於它會更好,如果一些變化可以作出

0

在我的Grails 2.5.X應用程序中,我啓用了Web過濾器中的休眠過濾器,即我在grails-app/conf/Filters.groovy

class Filters { 
     publishedContentFilter(uri: '/**'){ 
      before = { 
       // enable the 'published filter in the Condition domain class 
       Condition.enableHibernateFilter('published') 
      } 
     } 
    } 

在插件本身的集成測試,測試類的filters are enabled in the setup method此代碼。