gpt4 book ai didi

java - 对在 playframework 中实现搜索功能的疑问

转载 作者:行者123 更新时间:2023-12-01 15:45:07 27 4
gpt4 key购买 nike

我有一个具有 3 个页面 View 的网络应用程序。

1.一个index页面,其中列出了数据库中的所有Item,以及仅具有最新creationDate的Item的详细信息 显示。

2.itemDetails 页面,其中显示所选项目的详细信息。此页面还列出了数据库中的所有项目。

单击列出的项目将显示项目详细信息页面。

(这两个页面还包含一个文本输入字段,用户可以在其中输入单词来搜索与名称匹配的项目。)

3.搜索结果页面,显示与搜索查询匹配的项目列表。

我实现了前两个页面并创建了静态公共(public)函数。现在,我想实现搜索。我创建了该函数和一个列出搜索结果的结果页面。

我的问题是,如果我单击搜索结果中的某个项目,它将显示 itemDetails 页面,其中显示该项目的详细信息 以及数据库中所有项目的列表 ,因为这是itemDetails 函数是如何实现的。我宁愿单击将我带到一个页面,该页面显示项目 和作为搜索查询结果的项目 的详细信息。我知道在上述实现中这是不可能的,因为两个请求之间不保留状态。

那么,我应该怎么做?我无法清楚地思考这个问题。你能透露一些信息吗?

代码就像

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 页面:

与索引页类似..暂时我已经复制了索引页的所有内容。

搜索页面:

#{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}

最佳答案

我看到了几种可能性。首先,您可以添加新的 public static void itemSearchDetails(Long id, String keyword)对您的 Controller 执行操作。然后添加一个新的 itemSearchDetails.html 页面。最后将search.html页面中的链接更改为<a href="@{Application.itemSearchDetails(item.id)}">${item.name}</a>

这是我会采取的方法。修改 itemDetails() 方法以包含关键字参数。

 public static void itemDetails(Long id, String keyword) {
//selected item
Item item = Item.findById(id);
List<item> items;
if (StringUtils.isNotBlank(keyword) ) {
String query="select distinct item from Item item where item.name like :pattern";
items = Item.find(query).bind("pattern", pattern).fetch();
} else {
items = Item.find("order by creationDate desc").fetch();
}
render(items,item);
}

然后更改 HTML 文件中的相应调用。

关于java - 对在 playframework 中实现搜索功能的疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7203236/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com