Плагин Grails с возможностью поиска для нескольких классов доменов и нескольких полей поиска с помощью одной кнопки отправки

#plugins #grails #searchable

#Плагины #grails #с возможностью поиска

Вопрос:

У меня есть несколько объектов домена, и у меня есть отношения один ко многим, многие ко многим, и данные поиска поступают из нескольких таблиц, и это всегда одно и то же. Я внедрил плагин с возможностью поиска в своем приложении и могу получать результаты, когда у меня есть одно поле поиска, подобное этому:

 <g:form url='[controller: "searchable", action: "searchContact"]' id="searchableForm" name="searchableForm" method="get">
    <g:textField name="query" value="${params.query}" size="40"/>
    <input type="submit" value="Search Contact" />
</g:form>. 
  

Но у меня есть несколько текстовых полей, флажков и полей g: select, чтобы получить searchTerm. На основе любого из полей или нескольких вариантов поиска я должен получить результаты поиска. Как включить все поля поиска между ними и иметь единую кнопку отправки для всех параметров. Вот мой код действия поиска:

 def searchContact = { 
    if (!params.query) {
        return [:]
    }
    try {
        String searchTerm = params.query
        println searchTerm
        return [searchResult: searchableService.search(searchTerm, params)]
    } catch (SearchEngineQueryParseException ex) {
        return [parseException: true]
    }
}
  

Приветствуются быстрые предложения.

Ответ №1:

Вы можете передать все термины в одном строковом запросе, разделяя каждый токен / слово пробелом, так что, например, если у вас есть два класса домена, один из которых называется Person, а другой — Job, и вы ищете «John» и «Engineer», ваш строковый запрос должен быть «John Engineer», и это должно привести вас к обоим объектам домена.

Это то, что вы ищете?

Комментарии:

1. Обратитесь к моему <g:form> коду выше, я хочу, чтобы этот блок <g:form> </g: form> включал все параметры поиска, которые я ввожу в пользовательском интерфейсе, один или несколько. И у него должна быть одна кнопка поиска для отправки для всех или одного выбора поля поиска. Когда я включаю один параметр поиска в <g:form> </g: form>, он работает нормально, но если я добавляю больше, он выдает исключения. Есть идеи. Фрагмент кода поможет мне больше, учитывая 3 класса доменов, 3 параметра поиска из каждого домена и закрытие поиска.

2. У вас есть два варианта: 1. возьмите каждое значение и объедините их на клиенте с помощью Javascript или 2. поместите все значения внутрь формы и отправьте их все на сервер, а затем в вашем действии объедините их, чтобы сформировать значение запроса.

3. Я выберу вариант 2. Можете ли вы предоставить фрагмент кода, основанный на моем действии searchContact, показанном в моих оригинальных вопросах. Спасибо за помощь.

4. Все значения будут помещены внутрь объекта params, как это делается сейчас в запросе, поэтому вы извлекаете их из объекта params, такого как params.value1, и объединяете это с объектом query String.

5. Можете ли вы реорганизовать мой метод и отправить. Еще одна вещь — мой поиск должен быть с одним параметром поиска или комбинацией нескольких параметров поиска. Пожалуйста, измените мой метод, если вы найдете когда-нибудь сегодня,