1

私はPrimfacesを学ぼうとしています。現在、オートコンプリートコントロール(Pojoを使用)を使用しています。表示は正常に機能します。私が苦労しているのは、選択したオブジェクトを取得して、そのプロパティのいずれかにアクセスすることです。Beanで選択したオブジェクトのプロパティにアクセスしようとすると、nullPointerExceptionが発生します。誰かがこれを手伝ってくれますか(お願いします)?私のコードは、Primefacesの単純なpojoの例に基づいています:(http://www.primefaces.org/showcase-labs/ui/autoCompletePojo.jsf)。私のウェブページは次のようになります。

<h:form id="form">
<p:growl id="msg" showDetail="false"/>
<p:panel header="Test Form" toggleable="true">
        <h:outputLabel value="Player(s): " for="basicPojo" />
        <p:autoComplete value="#{autoCompleteBean.selectedPlayers}" 
                    id="basicPojo" completeMethod="#{autoCompleteBean.completePlayer}"
                    var="p" itemLabel="#{p.name}" itemValue="#{p}" converter="player" forceSelection="true" multiple="true">
            <p:ajax event="itemUnselect" listener="#{autoCompleteBean.handleUnselect}" />
            <f:facet name="itemtip">
                <h:panelGrid  columns="2" cellpadding="5">
                    <h:outputText value="eScholarId: " />
                    <h:outputText id="id-output" value="#{p.name}" />

                    <h:outputText value="Name: " />
                    <h:outputText id="name-output" value="#{p.number}" />

                    <h:outputText value="Email: " />
                    <h:outputText id="email-output" value="#{p.position}"/>
                </h:panelGrid>
            </f:facet>
        </p:autoComplete>

        <p:commandButton value="Submit" update="msg" action="#{autoCompleteBean.doMessage}"></p:commandButton>

</p:panel>

そして、Primefaces autoCompleteBeanを編集して、次のメソッドを追加しました。

    public void doMessage(){
    String txt = "dummy text";
    txt = this.selectedPlayers.get(0).getName();
    FacesMessage msg = new FacesMessage(txt);
    FacesContext.getCurrentInstance().addMessage(null, msg);
}

通常どおり、faces.configファイルのコンバーターに追加しました。

4

1 に答える 1

1

コレクションをオートコンプリートの値にバインドしているようです。

<p:autoComplete value="#{autoCompleteBean.selectedPlayers}"/>

ただし、単一のインスタンスを value 属性にバインドする必要があります。

private Player selectedPlayer;

// getter and setter

<p:autoComplete value="#{autoCompleteBean.selectedPlayer}"/>

送信ボタンによって呼び出されるメソッドでは、 経由で簡単にアクセスできますthis.selectedPlayer

于 2013-04-21T13:28:55.663 に答える