PrimeFaces自动完成错误

时间:2012-11-23 19:12:39

标签: jsf-2 primefaces

我面临一个奇怪的问题:p:autoComplete,我得到以下错误

  

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

我的代码如下

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,转换器部分然后它工作正常但是一旦我把var,itemValue,itemLabel,转换器代码(如下所示)主要展示)我得到上述错误。 请指导我做错了什么或者我应该检查什么。

注意:我的样本表只有两列,pk(int)&amp;播放器(字符串)。

1 个答案:

答案 0 :(得分:1)

我想出了问题,基本上如果我将列表传递给值(自动完成),则使用Multiple =“true”。而只做一个选择我需要只将Player对象传递给值(自动完成)。 希望这可以帮助其他人发帖而不理解它是如何工作的(像我一样)。