提问者:小点点

Primefaces多值自动完成


我正在使用primefaces AutoMLETE强制选择按名称搜索帐户

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个答案

匿名用户

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

如果这是某种类型的输入错误,并且您使用的是整数对象(而不是int原语),请确保使用对它们进行比较。等于方法。通过==比较整数将仅在-128-127范围内有效,超出该范围将比较引用。

希望有帮助

匿名用户

试试这个

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