0

編集可能な DataTable 内の Calendar コンポーネントを使用して日付フィールドを編集すると、奇妙なバグが発生します。説明するために、いくつかの写真を見せる必要があります。

まず、私が作業している実際のページは次のとおりです。

ベース GUI

ここで、リストの日付 1 を 2 月 13 日に変更して、[OK] をクリックします。

日付が変わります

ご覧のとおり、テーブルは変更されますが、行は別の行のデータを引き継ぎます。

日付が間違っています!

GUI 以外では、更新は問題なく行われ、ページをリロードすると、データベースの日付が更新されました。ページが更新された後の表は次のようになります。

DBで日付が正しい

私はこのバグを見つけようとしてコードを徹底的に調べましたが、これは PrimeFaces 自体のバグなのだろうかと考え始めています。ワークフロー全体を確認した結果、バッキング ArrayList には常に正しい値が含まれていると結論付けました。データベースからリストを取得するときと、DataTable の sortBy 属性を使用するときの両方で、リストを並べ替えることに関係があるのではないかと考えていました。ただし、両方を無効にした後も、バグは引き続き発生します。

これがページのコードです。私が間違ったことを誰かが見ることができますか?もしそうなら、あなたは私のヒーローです=)

<ui:composition template="/WEB-INF/standard-page-template.xhtml">
<ui:define name="title">Change Dates</ui:define>
<ui:define name="content">

    <p:panel header="Change dates" style="width:760px">
        <h:form>

            <p:panel>
                    Just the search stuff here...
            </p:panel>
            <p:panel header="Search">
                    <h:panelGrid columns="1">
                    <p:dataTable id="listDatesTable" value="#{view.dateWrappers}" var="wrapper"
                                 rowIndexVar="index" editable="true"
                                 emptyMessage="Search for an ID above">

                        <p:ajax event="rowEdit" listener="#{changePublishDateView.changeDate}"/>

                        <p:column headerText="Dragning" width="90">
                            <h:outputText value="#{wrapper.id}"/>
                        </p:column>

                        <p:column headerText="Beskrivning" width="180">
                            <h:outputText value="#{wrapper.description}"/>
                        </p:column>

                        <p:column headerText="Distribution" width="100">
                            <h:outputText value="#{wrapper.id2}"/>
                        </p:column>

                        <p:column headerText="Publiceringstid" width="170" styleClass="#{view.duplicateDateInRow(wrapper)}">
                            <p:cellEditor>
                                <f:facet name="output">
                                    <h:outputText value="#{wrapper.newhDate}">
                                        <f:convertDateTime pattern="yyyy-MM-dd HH:mm"/>
                                    </h:outputText>
                                </f:facet>
                                <f:facet name="input">
                                    <p:calendar
                                            mindate="#{view.minDate}" stepMinute="30" minHour="8" maxHour="22"
                                            pattern="yyyy-MM-dd HH:mm" value="#{wrapper.newDate}"/>
                                </f:facet>
                            </p:cellEditor>
                        </p:column>

                        <p:column width="50">
                            <p:rowEditor/>
                        </p:column>
                    </p:dataTable>
                </h:panelGrid>
            </p:panel>
        </h:form>
    </p:panel>
</ui:define>

4

1 に答える 1

0

結局のところ、このバグは、個々の行のデータがほぼ同一であることが原因でした。

解決策: データ テーブルの rowKey 属性を日付フィールドに設定します。ソートの有無にかかわらず正常に動作するようになりました。

http://www.developer.am/primefaces/?page=RowKey

于 2013-01-30T08:56:18.283 に答える