Primefaces多值自动完成

时间:2014-11-20 01:11:32

标签: jsf jsf-2 primefaces

我使用primefaces autocomlete force selection来按名称搜索帐户

JSF组件

<p:autoComplete value="#{journal.journal.debit}"
                completeMethod="#{account.completeAccount}" 
                var="var" itemLabel="#{var.name}" itemValue="#{var}"
                forceSelection="true" immediate="false" required="true">

Bean方法:

public List<Account> completeAccount(String query) {
    List<Account> allAccounts = service.get(Account.class);
    List<Account> filteredAccounts = new ArrayList();

    for (int i = 0; i < allAccounts.size(); i++) {
        Account foundAccount = allAccounts.get(i);
        if (foundAccount.getName().toLowerCase().contains(query.toLowerCase())) {
            filteredAccounts.add(foundAccount);
        }
    }
    return filteredAccounts;
}

这个工作正常,现在如果我想更改搜索以搜索查询值中的帐号。我使用了以下内容:

if (foundAccount.getName().toLowerCase().contains(query.toLowerCase()) || foundAccount.getNumber() == Integer.parseInt(query)) {
            filteredAccounts.add(foundAccount);
        }

但是,过滤器只返回搜索号码并忽略名称搜索。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

我认为迪帕克试图说的是,你所做的事情是完全有效的,而不是问题,而不是你的情况有问题。事实上,最明显的是没有Integer.parseInteger(String s)方法,至少没有java.lang.Integer方法。

如果这是某种拼写错误,并且您正在使用 Integer 对象(而不是 int 原语),请确保您&#39 ;使用.equals方法重新比较它们。将==之间的整数进行比较仅适用于-128-127的范围,在该范围之外,它将比较参考。

希望有所帮助

答案 1 :(得分:-1)

试试这个

if (
     (foundAccount.getName().toLowerCase().contains(query.toLowerCase()))
     ||
     (foundAccount.getNumber() == Integer.parseInteger(query))
   )
{
   filteredAccounts.add(foundAccount);
}