【问题标题】:Spring JPA and form filterSpring JPA 和表单过滤器
【发布时间】:2015-03-23 12:54:41
【问题描述】:

我有一个带有搜索表单(带有 namesurname 字段)和人员表的网页。当用户插入 name nsurname 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));
    }

现在,如果我有 namesurname,我的搜索就可以了。问题是当 namesurname 在 Web 表单中没有被重视时。

在这种情况下最好的做法是什么?

【问题讨论】:

    标签: java spring forms jpa controller


    【解决方案1】:

    您可以在 searchPersons 方法中检查 name 和 surname 是否都有值。如果name != null,添加姓名条件,如果surname != null,添加姓氏条件。只要添加了1个条件,就执行查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-30
      • 2015-03-26
      • 1970-01-01
      • 2014-11-16
      • 2017-11-24
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      相关资源
      最近更新 更多