gpt4 book ai didi

java - 使用 jsp-tags 搜索记录

转载 作者:行者123 更新时间:2023-11-30 10:37:05 25 4
gpt4 key购买 nike

我有一个包含记录列表的页面。我需要在我的列表页面中有一个搜索框,当用户输入关键字并单击搜索按钮时,表格的内容应该根据用户输入的关键字进行过滤。

这是我到目前为止所做的。

在我看来,我有这个:

         <form:find finderName="BySearchWord" id="ff_ph_com_domain_Accommodation" path="/accommodations">
<field:input disableFormBinding="true" field="searchKeyword" id="f_ph_com_domain_Accommodation" max="255" required="true"/>
</form:find>

为此,我正在使用名为 find 的 jsp 标签。

在我的 Controller 中,我有这个方法。

@RequestMapping(params = "find=BySearchWord", method = RequestMethod.GET)
public String list(@RequestParam("searchKeyword") String searchKeyword, @RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "size", required = false) Integer size, @RequestParam(value = "sortFieldName", required = false) String sortFieldName, @RequestParam(value = "sortOrder", required = false) String sortOrder, Model uiModel) {
if (page != null || size != null) {
int sizeNo = size == null ? 10 : size.intValue();
final int firstResult = page == null ? 0 : (page.intValue() - 1) * sizeNo;
uiModel.addAttribute("accommodations", Accommodation.findAllAccommodationBySearchBox());
} else {
uiModel.addAttribute("accommodations", Accommodation.findAllAccommodationBySearchBox());
}
addDateTimeFormatPatterns(uiModel);
return "accommodations/list";
}

老实说,我不确定将它放在这里是否正确,但这是我目前在我的域中拥有的内容。

public static List<Accommodation> findAllAccommodationBySearchBox() {
return entityManager().createQuery("SELECT a FROM Accommodation a WHERE a.person.firstName LIKE :searchKeyword OR a.person.middleName LIKE :searchKeyword OR a.person.lastName LIKE :searchKeyword OR a.room.roomNumber LIKE :searchKeyword OR a.person.pvId LIKE :searchKeyword OR a.startDate LIKE :searchKeyword OR a.endDate LIKE :searchKeyword", Accommodation.class).getResultList();
}


public static List<Accommodation> findAllAccommodationBySearchBox(String searchKeyword) {
String jpaQuery = "SELECT a FROM Accommodation a WHERE a.person.firstName LIKE :searchKeyword OR a.person.middleName LIKE :searchKeyword OR a.person.lastName LIKE :searchKeyword OR a.room.roomNumber LIKE :searchKeyword OR a.person.pvId LIKE :searchKeyword OR a.startDate LIKE :searchKeyword OR a.endDate LIKE :searchKeyword";
if (searchKeyword == null || searchKeyword.length() == 0) throw new IllegalArgumentException("The search keyword is required");
searchKeyword = searchKeyword.replace('*', '%');
if (searchKeyword.charAt(0) != '%') {
searchKeyword = "%" + searchKeyword;
}
if (searchKeyword.charAt(searchKeyword.length() - 1) != '%') {
searchKeyword = searchKeyword + "%";
}
return entityManager().createQuery(jpaQuery, Accommodation.class).getResultList();
}

这个在另一个类上:

public List<Accommodation> findAllAccommodationBySearchBox(String searchKeyword) {
if (searchKeyword == null || searchKeyword.length() == 0) throw new IllegalArgumentException("The description argument is required");
searchKeyword = searchKeyword.replace('*', '%');
if (searchKeyword.charAt(0) != '%') {
searchKeyword = "%" + searchKeyword;
}
if (searchKeyword.charAt(searchKeyword.length() - 1) != '%') {
searchKeyword = searchKeyword + "%";
}
EntityManager em = Accommodation.entityManager();
TypedQuery<Accommodation> q = em.createQuery("SELECT a FROM Accommodation a WHERE a.person.firstName LIKE :searchKeyword OR a.person.middleName LIKE :searchKeyword OR a.person.lastName LIKE :searchKeyword OR a.room.roomNumber LIKE :searchKeyword OR a.person.pvId LIKE :searchKeyword OR a.startDate LIKE :searchKeyword OR a.endDate LIKE :searchKeyword", Accommodation.class);
q.setParameter("searchKeyword", searchKeyword);
return q.getResultList();
}

我正在学习我在网上找到的教程,但它的结构与我所拥有的有点不同,所以我无法完全指出我没有做的事情。我现在真的很迷茫。近一天来,我一直在努力解决这个问题。

附言我只能在搜索框中键入内容,并在单击搜索按钮后重定向页面,但我只收到一条异常消息,提示“在查询执行期间提供的参数列表中未找到查询参数 searchKeyword。 "

希望有人能帮帮我。

最佳答案

整个代码看起来有点乱,但您的第一个问题是 Controller 中的 list(...) 方法。它需要很多参数,但它基本上做的是:

@RequestMapping(params = "find=BySearchWord", method = RequestMethod.GET)
public String list(@RequestParam("searchKeyword") String searchKeyword, @RequestParam(value = "page", required = false) Integer page, @RequestParam(value = "size", required = false) Integer size, @RequestParam(value = "sortFieldName", required = false) String sortFieldName, @RequestParam(value = "sortOrder", required = false) String sortOrder, Model uiModel) {
uiModel.addAttribute("accommodations", Accommodation.findAllAccommodationBySearchBox());

addDateTimeFormatPatterns(uiModel);
return "accommodations/list";
}

因为您的 if 语句根本不重要。因此,如果你想让它做任何事情,请修复你的 if 语句。您可能想要限制搜索结果,因此将值传递给 findAllAccommodationBySearchBox() 并将它们与 setMaxResults()setFirstResult() 方法一起使用。

现在,您不带任何参数调用 findAllAccommodationBySearchBox() 方法(使用您的查询根本不可能这样做),这将始终抛出异常,因为您没有为查询提供必需的信息参数。

您的“第一个”(顺便说一下,您不希望两个方法具有相同的用法、相同的名称、相同的参数甚至不同的代码)findAllAccommodationBySearchBox(String searchKeyword) 也不会添加必填参数。

关于java - 使用 jsp-tags 搜索记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40267250/

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