【发布时间】:2015-03-23 12:54:41
【问题描述】:
我有一个带有搜索表单(带有 name 和 surname 字段)和人员表的网页。当用户插入 name n 和 surname s 时,我必须显示具有 name 的人,例如 n 和 姓 比如s。当用户仅插入 name 时,我必须仅按 name 进行过滤,当用户仅插入 surname 时也是如此。
我在 Controller 中的 searchPersons 方法看起来像:
@RequestMapping(value = RouteConfig.SEARCH_PERSONS)
public @ResponseBody Page<Person> searchPersons(@ModelAttribute Person p, Pageable pageable) {
return pazienteRepository.findAll(where(nameIsLike(p.getName())).and(surnameIsLike(p.getSurname())), pageable);
}
我写了一个PersonSpecifications 类:
public class PersonSpecifications {
public static Specification<Person> nomeIsLike(String name) {
return (Root<Person> root, CriteriaQuery<?> query, CriteriaBuilder cb) ->
cb.like(cb.lower(root.<String>get(Person_.nome)), getLikePattern(name));
}
public static Specification<Person> surnameIsLike(String surname) {
return (Root<Person> root, CriteriaQuery<?> query, CriteriaBuilder cb) ->
cb.like(cb.lower(root.<String>get(Person_.surname)), getLikePattern(surname));
}
现在,如果我有 name 和 surname,我的搜索就可以了。问题是当 name 或 surname 在 Web 表单中没有被重视时。
在这种情况下最好的做法是什么?
【问题讨论】:
标签: java spring forms jpa controller