如何用Thymeleaf实现双条件搜索并解决th:value失效问题
搜索功能问题修复与双条件搜索实现
一、th:value失效问题解决
先看你代码里的几个明显问题:
- 第二个输入标签的
th:value语法错误,未闭合引号和括号:th:value="${search} name="search"这里缺少闭合的"和",导致标签解析失败。 - 两个输入框的
name都设为search,提交时参数会互相覆盖,且后端仅接收一个参数,回显时用同一个${search}也无法分别对应两个输入框。 - 前端表单的
action是/home/checkorcancelapplication,但后端控制器的请求路径是/home/checkapplication,路径不匹配,请求根本无法到达处理逻辑。
修改后的前端代码
<form th:action="@{/home/checkorcancelapplication}" method="post" autocomplete="off"> <li>申请编号 : <input type="text" th:value="${applicationNo}" name="applicationNo" > </li> <li>手机号码 : <input type="text" th:value="${phoneNumber}" name="phoneNumber" > </li> <button type="submit" value="Search" class="searchbutton" onclick="printmsg()">搜索</button> </form>
修改后的后端控制器代码
@RequestMapping(value="/home/checkorcancelapplication", method = RequestMethod.POST) public String maintainUserEnquiry(ModelMap model, @RequestParam(value = "applicationNo", required = false) String applicationNo, @RequestParam(value = "phoneNumber", required = false) String phoneNumber) throws Exception { Application inclass = null; // 只要有一个参数不为空就执行搜索 if ((applicationNo != null && !applicationNo.isEmpty()) || (phoneNumber != null && !phoneNumber.isEmpty())) { // 根据业务需求调用对应的双条件查询方法 inclass = CheckApplicationService.findByApplicationNoOrPhoneNumber(applicationNo, phoneNumber); // 把用户输入的参数放回模型,用于页面回显 model.addAttribute("applicationNo", applicationNo); model.addAttribute("phoneNumber", phoneNumber); } model.addAttribute("inclass", inclass); return "home/checkapplication"; }
二、双条件搜索实现步骤
- 前端参数区分:给两个输入框设置不同的
name,后端用@RequestParam分别接收,避免参数覆盖。 - 业务层实现多条件查询:在Service层编写支持双条件的方法,比如:
- 同时匹配申请编号和手机号:
findByApplicationNoAndPhoneNumber(String appNo, String phone) - 匹配任一条件:
findByApplicationNoOrPhoneNumber(String appNo, String phone)
如果用JPA,直接按规则写方法名就能自动生成查询,也可以自定义JPQL实现更复杂的逻辑。
- 同时匹配申请编号和手机号:
- 参数回显处理:把用户提交的查询参数重新添加到Model中,这样前端的
th:value就能获取到对应的值,搜索后页面会保留用户输入的内容。
内容的提问来源于stack exchange,提问作者ZZZ
相关产品推荐
相关产品推荐

