1

我在使用 p:autoComplete 时遇到了一个奇怪的问题,出现以下错误

java.lang.NumberFormatException:对于输入字符串:“玩家”

我的代码如下

xhtml

<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

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) {

}

转换器

@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) & player(string)。

4

1 回答 1

1

我发现了问题,基本上如果我将列表传递给值(自动完成),那么 Multiple="true" 已被使用。而只做一个选择,我只需要将 Player 对象传递给值(自动完成)。希望这可以帮助那些在不了解它是如何工作的情况下发帖的人(比如我)。

于 2012-11-28T05:44:02.803 回答