#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. Можете ли вы реорганизовать мой метод и отправить. Еще одна вещь — мой поиск должен быть с одним параметром поиска или комбинацией нескольких параметров поиска. Пожалуйста, измените мой метод, если вы найдете когда-нибудь сегодня,