PrimeFaces AutoComplete error
我在使用 p:autoComplete 时遇到了一个奇怪的问题,我收到以下错误
java.lang.NumberFormatException: For input string:"player"
我的代码如下
xhtml
1 2 3 | <p:autoComplete id="schedChemAC" value="#{testMB.selectedPlayer}" completeMethod="#{testMB.completePlay}" process="@this" var="m" itemLabel="#{m.player}" itemValue="#{m}" converter="#{testConverter}"> <p:ajax event="itemSelect" listener="#{testMB.onSelectFrstL}" process="@this"/> </p:autoComplete> |
MBean
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public List<Player> getSelectedPlayer() { return selectedPlayer; } public void setSelectedPlayer(List<Player> selectedPlayer) { this.selectedPlayer = selectedPlayer; } public void getName() { playerName = playerSession.getAll(); } public List<Player> completePlay(String query) { List<Player> suggestion = new ArrayList<Player>(); if (playerName == null) { getName(); } for (Player c : playerName) { if (c.getPlayer().toUpperCase().contains(query.toUpperCase())) { suggestion.add(c); } } return suggestion; } public void onSelectFrstL(SelectEvent event) { } |
转换器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | @Named(value ="testConverter") public class TestConverter implements Converter { @EJB PlayerSession playSession; public static List<Player> playLst; @Override public Object getAsObject(FacesContext context, UIComponent component, String value) { if (playLst == null) { playLst = playSession.getAll(); } if (value.trim().equals("")) { return null; } else { try { int number = Integer.parseInt(value); for (Player c : playLst) { if (c.getPk() == number) { return c; } } } catch (Exception ex) { System.out.println("error"); } } return null; } @Override public String getAsString(FacesContext context, UIComponent component, Object value) { if (value == null || value.equals("")) { return""; } else { return String.valueOf(((Player) value).getPk()); } } |
}
我无法在上面的代码中找到问题所在,如果我删除了 var、itemValue、itemLabel、converter 部分,那么它工作正常,但是一旦我输入 var、itemValue、itemLabel、converter 代码(如主要展示)我收到上述错误。
请指导我做错了什么或我应该检查什么。
注意:我的示例表只有两列,pk(int)
我发现了问题,基本上如果我将列表传递给值(自动完成),那么 Multiple="true" 已被使用。而只做一个选择,我只需要将 Player 对象传递给值(自动完成)。
希望这可以帮助那些在不了解它是如何工作的情况下发帖的人(比如我)。