当前位置: 首页 > 知识库问答 >
问题:

Spring JPA和表单过滤器

乜胜泫
2023-03-14

我有一个带有搜索表单(带有姓名字段)和人员表的网页。当用户插入姓名n和姓氏s,我必须显示姓名n、姓氏s的人。当用户只插入姓名时,我必须只按姓名过滤,当用户只输入姓氏时也是如此。

控制器中的我的搜索人员方法如下所示:

@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));
    }

现在,如果我有名字和姓氏,我的搜索就可以了。问题是在网络表单中,名字或姓氏没有值。

在这种情况下,最佳做法是什么?

共有1个答案

颜志学
2023-03-14

您可以在searchPersons方法中检查名称和姓氏是否都有值。如果<代码>名称!=空,如果为姓氏!=空添加姓氏条件。只要添加了1个条件,就执行查询。

 类似资料:
  • 我目前正在学习框架"CodeIgniter"。但是我的表单验证有问题。首先,让我向你展示我的观点: 我的控制器: 当我在set_rules()中删除控制器中的“xss_clean”过滤器时,它工作正常,表单有效。如果“xss_clean”存在,则它不起作用,将进入else。我在输入中不使用特殊字符,只使用字母。 在设置中,我把这个设置为true:$config['global_xss_filter

  • 过滤字段的列表,每一个成员应该是数组或对象 $data = [ ['id'=>1, 'name'=>'a'], ['id'=>2, 'name'=>'b'], ]; // 两个毫无意义的实例化写法 $list = new FilterableList; $list = new FilterableList($data); // 只保留 name 字段 $list = new Fi

  • 雄辩的关系如下: 商店属于许多商店时代(属于许多) 数据透视表(store\u day\u time\u stores)有一个名为“user\u id”的键,storedaytimes表有一个名为“date”的字段。 我想根据给定的“用户id(来自数据透视表)”和“开始”和“结束”日期(来自storedaytime表)过滤“storedaytimes”中的记录。 我现在的问题是 它产生了一个看起来

  • 我有完全合法的数据来源: 我将其显示在这样的表中: 现在假设我想过滤我的数组。如果我有固定的行数,我可以在< code>tr元素上使用< code>*ngIf来选择显示/不显示一个项目,但是Angular不允许在一个元素上有两个结构指令。 我知道我可以使用< code>Array.filter简单地过滤源数组,但是这样会产生一个副本,如果我的数组大得多,这可能会成为一个问题。 我想将该行嵌套在某个

  • 问题内容: 我开始使用django-tables2(从第一印象中就可以强烈推荐),我问自己如何实现列过滤。我找不到合适的文档,但是我确定它在那里。 问题答案: 答案有点晚了,但是无论如何…我也找不到任何合适的文档来进行列过滤。有很多方法可以做到这一点: 答:手动:我添加了一个包含要过滤的字段的表单,然后在我的视图中执行以下操作: 这很好用,但是不是那么干,因为它在视图中是硬编码的。 B.使用Sin

  • 过滤表达式 mitmproxy工具中的许多命令都使用过滤器表达式。过滤器表达式由以下运算符组成: 命令 描述 〜a 匹配响应资源:CSS,Javascript,Flash,images。 〜b regex Body 〜bq regex 请求的Body 〜bs regex 响应的Body 〜c int HTTP响应码 〜d regex 域名 〜dst regex 匹配目标地址 〜e 匹配错误 〜h