1

私はprimefaces-3.4を使用しており、マスターページのデータテーブルに選択したアイテムの詳細を表示するダイアログ(詳細ページ)があります。私のBeanは@ViewScopedであり、actionListenerメソッドで確実に詳細をロードしています。マスターページが表示されたら、最初にp:commandButtonをクリックすると、ダイアログが表示されなくなり、2回目のクリックで正しく表示されます。Chromeデベロッパーツールを使用して確認しましたが、異常は見られません。選択したアイテムの詳細がUIに「バインド」されていないだけです。

これが私のBeanコードとxhtmlです

@PostConstruct
public void init() {
    // load credits if there is an account selected...
    if (mainBean.getSelectedAccount() != null) {

        ArrayList<Credit> cs = loadCredits(mainBean.getSelectedAccount());
        setCredits(cs);
        mainBean.getSelectedAccount().setCredits(cs);
    }
    if (this.selectedCredit != null) {
        ArrayList<Installation> installations = loadInstallations(selectedCredit);
        selectedCredit.setInstallations(installations);
        setPaymentAmount(Float.parseFloat(installations.get(installations.size()-1).getAmount()));
    }
}
....
//actionListener to select
public String select() {
    if (selectedCredit != null) {
        ArrayList<Installation> installations = loadInstallations(selectedCredit);
        selectedCredit.setInstallations(installations);
    }
    return null;
}

これが私のxhtmlのスニペットです

<p:dataTable var="credit" selectionMode="single"
                        emptyMessage="Kayıt Bulunamadı..."
                        selection="#{accountBean.selectedCredit}" rowKey="#{credit.id}"
                        value="#{accountBean.credits}" id="credit_table" paginator="true"
                        paginatorAlwaysVisible="false" rows="10">
                        <f:facet name="header">
                            <small>İlgili krediyi seçtikten sonra "Detay" butonuna
                                tıklayınız..</small>
                        </f:facet>
                        <p:column>
                            <h:outputText headerText="Kredi ID" value="#{credit.id}" />
                        </p:column>
                        <p:column headerText="Kredi Adı">
                            <h:outputText value="#{credit.name}" />
                        </p:column>
                        <p:column headerText="Tutarı">
                            <h:outputText value="#{credit.total}" />
                        </p:column>

                        <f:facet name="footer">
                            <p:toolbar>
                                <p:toolbarGroup align="left">
                                    <p:commandButton actionListener="#{accountBean.select}"
                                        icon="ui-icon-search"
                                        update=":productdetailform:product_detail"
                                        oncomplete="kredidetail.show();" value="Detay">
                                        <f:ajax render=":productdetailform:product_detail" />
                                    </p:commandButton>
....
<h:form id="productdetailform">
            <p:dialog id="product_detail"
                header="#{accountBean.selectedCredit.name}" widgetVar="kredidetail"
                modal="true" height="700" width="850">
                <div class="row">
                    <div class="twelve columns">
                        <ul class="block-grid three-up">
                            <li><b>Kredi Hesap Adı: </b> <h:inputText readonly="true"
                                    value="#{accountBean.selectedCredit.name}" /></li>
                            <li><b>Kredi Tutarı: </b> <h:inputText readonly="true"
                                    value="#{accountBean.selectedCredit.total}" /></li>
                            <li><b>Veriliş Tarihi: </b> <p:calendar readonly="true"
                                    pattern="dd.MM.yyyy" readonlyInput="true" id="loan_date"
                                    value="#{accountBean.selectedCredit.loanDate}" /></li>
                            <li><b>Ödenen: </b> <h:inputText readonly="true"
                                    value="#{accountBean.selectedCredit.paid}" /></li>
                            <li><b>Kalan: </b> <h:inputText readonly="true"
                                    value="#{accountBean.selectedCredit.remaining}" /></li>
                            <li><b>Durumu: </b> <h:outputText value="AKTİF" /></li>

                        </ul>
                    </div>
                </div>
                <div class="row">
                    <div class="twelve columns">
                        <p:dataTable var="ins" emptyMessage="Kayıt Bulunamadı..."
                            value="#{accountBean.selectedCredit.installations}"
                            id="credit_details_table">
                            <p:column headerText="Taksit No">
                                <h:outputText value="#{ins.installationNo}" />
                            </p:column>
                            <p:column headerText="Vadesi">
                                <h:outputText value="#{ins.paymentDue}">
                                    <f:convertDateTime pattern="dd.MM.yyyy" />
                                </h:outputText>
                            </p:column>
                            <p:column headerText="Taksit Tutarı">
                                <h:outputText value="#{ins.amount}" />
                            </p:column>
                            <p:column headerText="Taksit Tutarı">
                                <h:outputText value="#{ins.paidAmount}" />
                            </p:column>
                            <p:column headerText="Ödeme Durumu">
                                <h:outputText value="#{ins.status}" />
                            </p:column>
                            <p:column headerText="Ödeme Tarihi">
                                <h:outputText value="#{ins.actualDate}" />
                            </p:column>
                        </p:dataTable>
                    </div>
                </div>
            </p:dialog>
        </h:form>

それで、実際に問題は何ですか?

4

1 に答える 1

0

私の知る限り、actionListener メソッドには署名が必要です: public void actionListener(ActionEvent event). actionの代わりに使用してみてくださいactionListener

また、データテーブルを囲むフォームはありますか? 複数のフォームを使用する場合、JSF にいくつかのバグがありました。ダイアログのみではなく、フォーム全体を更新してみてください。update=":productdetailform"

于 2012-11-09T12:58:37.520 に答える