У меня есть веб-приложение, которое имеет 3 просмотра страницы.
1.an index
страница, где перечислены все Item
s в дБ, и показаны подробности только Item
с последним creationDate
.
2.На странице itemDetails
, где отображаются сведения о выбранном элементе. На этой странице также перечислены все элементы в дБ.
При нажатии на указанный элемент откроется страница itemDetails.
(Эти две страницы также содержат поле ввода текста, где пользователь может ввести слово для поиска элементов, соответствующих именам.)
3.A search
страница результатов, на которой показан список элементов, соответствующих поисковому запросу.
Я реализовал первые две страницы и создал статические общедоступные функции. Теперь я хочу реализовать поиск. Я создал функцию и страницу результатов, в которой перечислены результаты поиска.
Моя проблема в том, что, если я нажму на элемент из результатов поиска, он откроет страницу itemDetails, которая показывает детали этого элемента and a listing of all items in db
, поскольку именно так была реализована функция itemDetails. Я бы предпочел иметь нажмите, чтобы перейти на страницу, которая показывает детали элемента and items which were results of the search query
. Я знаю, что это невозможно в приведенной выше реализации, поскольку состояние не сохраняется между двумя запросами.
Итак, как мне это сделать? Я не могу ясно об этом думать. Можете ли вы пролить свет?
Код похож на
package controllers;
...
public class Application extends Controller {
...
public static void index() {
//all items
List<Item> items = Item.find("order by creationDate desc").fetch();
//the latest created item
Item item = items.get(0);
render(items,item);
}
public static void itemDetails(Long id) {
//selected item
Item item = Item.findById(id);
//all items
List<item> items = Item.find("order by creationDate desc").fetch();
render(items,item);
}
public static void search(String keyword) {
String kw = keyword.trim();
String pattern = "%"+kw+"%";
String query="select distinct item from Item item where item.name like :pattern";
List<Item> items = Item.find(query).bind("pattern", pattern).fetch();
render(items);
}
...
}
index.html страница
#{extends 'main.html' /}
#{set title:'Home' /}
#{if item}
//show the details of item
#{/if}
#{if items.size()>0}
#{list items:items, as:'item'}
<a href="@{Application.itemDetails(item.id)}">${item.name}</a>
#{/list}
#{/if}
#{else}
There are currently no items
#{/else}
#{form @Application.search(keyword)}
<input type="text" name="keyword" id="keyword" size="18" value=""/>
<input type="submit" value="search"/>
#{/form}
itemDetails.html page:
похоже на страницу указателя .. пока я скопировал все содержимое страницы указателя.
страница поиска:
#{extends 'main.html' /}
#{set title:'search results' /}
#{if items.size()>0}
#{list items:items, as:'item'}
<a href="@{Application.itemDetails(item.id)}">${item.name}</a>
#{/list}
#{/if}
#{else}
<div class="empty">
could not find items with matching name here.
</div>
#{/else}