重用json / model对象以避免对控制器进行额外调用

时间:2016-04-21 21:27:23

标签: grails dojo

我有一个常规的userController和一个_listMyUsers.gsp。 _listMyUsers.gsp正在使用

 <g:dojoRemoteForm
            formName="userSearchForm"
            id="userSearchForm"
            url="[controller:'user',action:'search']"
            update="[success:'content']"> 

userController(search)中的方法是一个简单的条件构建器,它将以下内容返回给gsp,您可以使用gsp中的控件来自定义搜索条件参数(以param.field_name的形式传递给控制器​​)​​: / p>

    render (template:"listUsers",
            model:[
                    users:users,
                    userTypes:UserTypeLookup.list(),
                    sortby:params.sortby,
                    direction:nextDirection,
                    currentDirection:sortDirection,
                    pager:pager,
                    organizations:orgs,
                    userType:userSearchTypes
            ])

现在这一切都很好用,然后用模型构建我的usersList表。当我点击结果中的一个用户来编辑所述用户数据时,我的问题就出现了,然后保存。保存完成并返回主listUsers表。但它重新运行搜索方法,所有searchCriteria都被称为&#39; ALL&#39;在选择中(因此返回DB中的所有用户) 我的问题是,我怎样才能保留最初的&#34; custom&#34;返回搜索,以便在我完成编辑我的用户时,原始&#34;搜索&#34;仍然存在,所以我的UI用户不必返回并再次重新执行他们的userSearch标准? 谢谢,

1 个答案:

答案 0 :(得分:1)

The Grails Cache Plugin might help you here. You could cache the output form the search action, using the user's query parameters as method arguments (so they can be used as keys to the cache).

@Cacheable('searchResults')
def search(String sortBy, String sortDirection /* other parameters */)   {
  // render the output
}

Then in your save action, you can use the CacheEvict annotation to clear the searchResults cache, so the search action will return the latest data:

@CacheEvict(value='searchResults', allEntries=true)
def saveUser() {
  //save the user and return a response code
}

See the plugin documentation for details on specifying which items in the cache to evict, etc.