我使用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);
}
但是,过滤器只返回搜索号码并忽略名称搜索。我怎样才能做到这一点?
答案 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);
}