1

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、converter部分を削除すると正常に動作しますが、var、itemValue、itemLabel、converterコードを配置すると(プライムショーケースに示されているように)上記のエラーが発生します。私が間違っていること、または確認すべきことについて親切に案内してください。

注: サンプル テーブルには、pk(int) と player(string) の 2 つの列しかありません。

4

1 に答える 1

1

基本的にリストを値に渡すと(AutoComplete)、Multiple = "true"が使用されます。1 つの選択だけを行うのに対し、Player オブジェクトのみを値 (AutoComplete) に渡す必要があります。これが、それがどのように機能するかを理解せずに投稿する他の誰か(私のように)に役立つことを願っています.

于 2012-11-28T05:44:02.803 に答える