0

私は単純なデータテーブル(Primefaces)を持っています。この表の最後の列には、パラメーター (f:param) を設定するボタンが含まれています。ajax="true" パラメータを指定して p:commandButton を使用しています。ボタンはアクション (マネージド Bean のメソッド) にバインドされます。データテーブルのボタンを2回クリックするまで、すべて問題ありません。何故ですか ?

コードは次のようになります。

<p:dataTable id="zones" value="#{appointmentForm.matchingZones}"
             var="zone" paginator="true" rows="10"
             paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
             emptyMessage="#{msg['label.noAvailableZones']}">
    <p:column headerText="#{msg['label.choose']}">
        <p:commandButton value="#{msg['label.choose']}"
                         actionListener="#{appointmentForm.handleChosenZone}" process="@this"
                         update=":verificationForm" ajax="true">
            <f:param name="zoneId" value="#{zone.id}"/>
        </p:commandButton>
    </p:column>
</p:datatable>

最初にパラメーターが適切に設定されている行のボタンをクリックすると、2回目にNullPointerExceptionが発生します。

何か案は ?

4

1 に答える 1

0

私は間違った場所を探していました。Zone は、ID、作成日などを含む BaseEntity のサブクラスです。

BaseEntity などを使用する場合は、シリアル化について覚えておいてください。私の場合、ゾーンがありました:

public class Zone extends BaseEntity implements Serializable {
    ...
}

そして BaseEntity:

public class BaseEntity {
    @ID
    @GeneratedValue
    protected Long id;
    ...
}

そのため、id フィールドはシリアル化されませんでした。解決策は、 public class BaseEntity implements Serializableを追加することです。

于 2013-07-22T12:00:46.630 に答える