Grails:动态过滤Grails表中的数据

时间:2010-06-23 19:52:41

标签: grails search groovy filter

我有一张桌子,有一系列的活动, 我班级的名字是Entry。

这是我桌上的照片

是西班牙语,但基础是相同的,所以它应该不是问题。 (过滤器HTML代码还不是很混乱,但它有效)

以下是我查找条目时得到的结果。

http://i45.tinypic.com/r1iexv.jpg

现在我的问题是我需要将结果从pic1显示/过滤到同一个表中,所以它基本上就像应用过滤器的表更新一样。

如果您需要更多信息,请链接到我的旧问题。谢谢proflux!

I have a bunch of data and I need a data filter using Grails

大多数搜索代码都在那里,

任何帮助将不胜感激!

更新

我在过滤日期时遇到问题...我有两个约会... 一个是事件发生的日期,另一个是lastUpdated,我认为这是上次修改事件时grails的关键字。任何与过滤日期相关的帮助都将非常感激。

我需要从今天的日期开始在第一张桌子上展示所有内容。如果我想找到过去的东西,我应该能够使用过滤器来找到它。

关于如何做到这一点的任何想法?

更新

所以这是我的list.gsp

http://i49.tinypic.com/291ksy1.png

这是我的searchResults.gsp,其中过滤器应用于单词“Ruta”

所以基本上所有东西看起来都很漂亮,但日期过滤器不起作用。

以下是控制器中未过滤日期的代码

def searchResults = { 
    def entryCriteria = Entry.createCriteria() 
    def results = entryCriteria.list { 
        if(params?.proyectoRuta) { 
            ilike("proyectoRuta","%${params.proyectoRuta}%")
            } 

        }
        if(params?.day) {
            eq("fechaCambio", params.day)
        } 
        render(view:'searchResults', model:['results':results]) 
} 

正在过滤单词而不是日期

proyectoRuta将是标题,fechaCambio将是第一列中显示的日期。我还没有尝试过滤lastUpdated日期。

更新

好的,这是我的控制器:因为很多代码我只会发布重要的defs

def search = { 
    render(view:'search') 

} 

def searchResults = { 
    def entryCriteria = Entry.createCriteria() 
    def results = entryCriteria.list {
        if(params?.fechaCambioD && params?.fechaCambioH) { 
            between("fechaCambio", params.fechaCambioD, params.fechaCambioH) 
            } 

        if(params?.lastUpdatedD && params?.lastUpdatedH) { 
            between("lastUpdated", params.lastUpdatedD, params.lastUpdatedH) 
            }

        if(params?.proyectoRutaN) { 
            ilike("proyectoRuta","%${params.proyectoRutaN}%")
            }            
        }
        render(view:'searchResults', model:['results':results, 'proyectoRutaN':params?.proyectoRutaN, 'fechaCambioD':params?.fechaCambioD, 'fechaCambioH':params?.fechaCambioH, 'lastUpdatedD':params?.lastUpdatedD, 'lastUpdatedH':params?.lastUpdatedH]) 
} 
}

这是searchResults.gsp

<tbody>
                <g:each in="${results}">

                        <td><g:formatDate format="dd-MMMM-yyyy" date="${it.fechaCambio}" /></td>
                        <td><b>${it.proyectoRuta}</b></td>
                        <td>${it.summary}</td>
                        <td><g:formatDate format="dd-MMM-yyyy HH:mm z" date="${it.lastUpdated}" /></td>
                        <td>
                        <g:form>
                            <g:hiddenField name="id" value="${it?.id}" />
                            <span class="simple"><g:actionSubmit class="editar" action="edit" value="${message(code: 'default.button.editar.label', default: '&nbsp;&nbsp;&nbsp;')}" /></span>
                            <span class="simple"><g:actionSubmit class="eliminar" action="delete" value="${message(code: 'default.button.eliminar.label', default: '&nbsp;&nbsp;&nbsp;')}" onclick="return confirm('${message(code: 'default.button.delete.confirm.message', default: 'Esta seguro que desea Eliminar?')}');" /></span>
                        </g:form>
                        </td>
                    </tr>
                </g:each>
            </tbody>

2 个答案:

答案 0 :(得分:1)

听起来您想在“列表”视图中显示搜索结果,因此它们会像未经过滤一样显示在表格中。您可以重用该视图并将过滤后的结果作为实例列表传递。

您是否拥有Entry域对象的视图?如果没有,请使用grails generate-view Entry生成一些脚手架视图。然后在你的控制器中,使你的searchResults方法看起来像这样:

def searchResults = {
    def entryInstanceList = Entry.list() // replace with actual filtering logic
    render(view:'list', model: [entryInstanceList: entryInstanceList])
}

答案 1 :(得分:1)

尝试使用相同的gsp同时获得结果和搜索条件......

<html>
<body>
    <h1>Search Criteria</h1>

    <g:form controller="entry" action="searchResults">
        Title: <g:textField name="title" value="${title}" />
        Date: <g:datePicker name="startTime" value="${startTime}" precision="day" />
        <g:submitButton name="submit" value="Search" />
    </g:form>
    <g:if test="${results}">
        <h1>Search Results</h1>
        <table>
            <tr>
                <th>Title</th>
                <th>Start Date</th>
            </tr>
            <g:each in="${results}">
                <tr>
                    <td>${it.title}</td>
                    <td>${it.startTime}</td>
                </tr>
            </g:each>
        </table>
    </g:if>
</body>
</html>

然后为你的控制器关闭:

def search = {
        render(view:'search')
    }

    def searchResults = {
        def entryCriteria = Entry.createCriteria()
        def results = entryCriteria.list {
            if(params?.title) {
                ilike("title", "%${params.title}%")
            }
        }
        render(view:'search', model:['results':results, 
                                     'title':params?.title, 
                                     'startTime':params?.startTime])
    }

这是我快速编写的一个快速演示,但是根据我在另一个问题上提供的信息和使用条件查询的Grails Reference Documentation,你应该能够弄明白。如果您遇到任何问题,请告诉我。

<强>更新

根据您的标准尝试这样的事情:

def entryCriteria = Entry.createCriteria()
def results = entryCriteria.list {
    if(params?.title) {
        ilike("title", "%${params.title}%")
    }
    if(params?.day) {
        between("day", params.day, params.day+1)
    }
}