Grails: динамически фильтровать данные в таблице Grails - PullRequest
3 голосов
/ 23 июня 2010

У меня есть таблица с серией событий, имя моего класса - Entry.

Вот изображение моей таблицы

на испанском языке, но основы те жетак что это не должно быть проблемой.(фильтр HTML-кода еще не так, что это беспорядок, но он работает)

и вот результаты, которые я получаю, когда я ищу запись.

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

Теперь моя проблема в том, что мне нужно, чтобы результаты были показаны / отфильтрованы в той же таблице из pic1, так что это было бы в основном как обновление таблицы с применением фильтров.

Если вам нужна дополнительная информация, вотссылка на мой старый вопрос.Спасибо, proflux!

У меня есть куча данных, и мне нужен фильтр данных с использованием Grails

Большая часть кода поиска есть,

ЛюбойПомощь будет принята с благодарностью!

ОБНОВЛЕНИЕ:

У меня проблема с фильтрацией дат, хотя ... У меня есть две даты ... Одна - это дата, когда событие должно состояться,а другой - lastUpdated, который, я думаю, является ключевым словом для grails в последний раз, когда вы модифицировали событие.Буду очень признателен за любую помощь, связанную с фильтрацией дат.

Мне нужно показать все в первой таблице, начиная с сегодняшней даты.И если я захочу найти что-то из прошлого, я смогу использовать фильтр, чтобы найти это.

Есть идеи, как это сделать?

ОБНОВЛЕНИЕ:

Так вот мой list.gsp

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

и вот мой searchResults.gsp с фильтрами, примененными к слову "рута"

В общем, все выглядит красиво и красиво, но фильтры даты не работают.

Вот код в контроллере, который не фильтрует даты

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 будет датой, показанной в первом столбце.Я еще не пытался отфильтровать дату последнего обновления.

ОБНОВЛЕНИЕ:

Хорошо, так вот мой контроллер: Так как много кода, я буду публиковать только важные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 ]

1 голос
/ 24 июня 2010

Попробуйте использовать один и тот же 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 об использовании критериальных запросов, вы сможете понять это.Дайте мне знать, если у вас возникнут какие-либо проблемы.

Обновление:

Попробуйте что-то подобное для ваших критериев:

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)
    }
}
1 голос
/ 24 июня 2010

Звучит так, будто вы хотите отобразить результаты поиска в виде списка, чтобы они отображались в таблице, как если бы они не были отфильтрованы. Вы можете просто повторно использовать это представление и передать отфильтрованные результаты в виде списка экземпляров.

Есть ли у вас представления для вашего объекта домена Entry? Если нет, сгенерируйте некоторые представления лесов с помощью grails generate-view Entry. Затем в вашем контроллере заставьте ваш метод searchResults выглядеть примерно так:

def searchResults = {
    def entryInstanceList = Entry.list() // replace with actual filtering logic
    render(view:'list', model: [entryInstanceList: entryInstanceList])
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...