关于jsf 2:PrimeFaces AutoComplete 错误

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 对象传递给值(自动完成)。
希望这可以帮助那些在不了解它是如何工作的情况下发帖的人(比如我)。