簡體   English   中英

JSF PrimeFaces rowSelect用於從另一個數據表調用一個數據表

[英]JSF PrimeFaces rowSelect for one datatable being called from another datatable

我在一個列出所有購買的選項卡中有一個Purchase表。 選擇一行后,應該打開一個對話框,該對話框顯示特定客戶的購買清單。 另外,在代碼中有添加了新的購買,其中一個對話框, Customer可以從以前的客戶的數據表中的列表中選擇。

我的問題是,當我在購買表中選擇一行時,它正在調用客戶數據表中的rowSelect ajax事件(從“新購買”對話框中),而不是觸發它自己的rowSelect事件來打開“ Purchase對話框。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:p="http://primefaces.org/ui"
    xmlns:c="http://java.sun.com/jstl/core"
    xmlns:o="http://omnifaces.org/ui"
    xmlns:of="http://omnifaces.org/functions">
<h:head>

</h:head>
<h:body>

    <p:growl id="messages" showDetail="true" />

    <h:form id="newPurchaseCommandForm" enctype="multipart/form-data">
        <p:commandButton value="New Purchase" process="@this"
            onclick="PF('newPurchase').show()" id="btnNewPurchase">
            <f:actionListener binding="#{purchasesDAO.init()}" />
        </p:commandButton>
    </h:form>

    <p:tabView id="tabView" dynamic="true" cache="true" scrollable="true"
        style="font-size:12px;">

        <p:tab id="tba1" title="Purchase List">
            <h:form id="purchaseTableForm" enctype="multipart/form-data">
                <p:dataTable id="PurchaseTable" var="purchaseVar"
                    rowKey="#{purchaseVar.id}"
                    selection="#{purchasesDAO.selectedPurchaseRow}"
                    widgetVar="purchasesTableSearch"
                    filteredValue="#{purchasesDAO.filteredPurchaseRow}"
                    selectionMode="single" value="#{purchasesDAO.purchaseList}"
                    style="font-size:10px;">

                    <!-- Opens dialog -->
                    <p:ajax event="rowSelect" listener="#{purchasesDAO.onRowSelect}"
                        update=":messages" oncomplete="PF('showPurchase').show()" />

...
                </p:dataTable>
            </h:form>
        </p:tab>

    </p:tabView>

    <p:dialog header="Purchase Details" widgetVar="showPurchase"
        id="dialog" resizable="true" modal="false" hideEffect="explode"
        height="500" width="990">

...

    </p:dialog>


    <p:dialog header="Add New Purchase" widgetVar="newPurchase"
        id="dialogNewPurchase" resizable="true" modal="true" hideEffect="explode"
        closeOnEscape="true" height="600" width="900">
        <h:form id="form-newcasedialog" enctype="multipart/form-data">

            <p:dataTable id="CustomerTable" var="customer"
                rowKey="#{customer.id}"
                selection="#{purchasesDAO.selectedCustomerRow}"
                widgetVar="purchasesTableSearch"
                filteredValue="#{purchasesDAO.filteredCustomerRow}"
                selectionMode="single" value="#{purchasesDAO.customerList}"
                style="font-size:10px;">

                <!-- Opens dialog -->

                <p:ajax event="rowSelect" listener="#{purchasesDAO.onRowSelect3}"
                    process="@this" />
...
                </p:dataTable>

        </h:form>
    </p:dialog>

</h:body>
</html>

解決這個問題花了我很多年的時間,但結果卻是一個簡單的單行錯字。 客戶表和購買表的widgetVar相同:

<p:dataTable id="CustomerTable" var="customer"
    rowKey="#{customer.id}"
     selection="#{purchasesDAO.selectedCustomerRow}"
     widgetVar="purchasesTableSearch"
     filteredValue="#{purchasesDAO.filteredCustomerRow}"
     selectionMode="single" value="#{purchasesDAO.customerList}"
     style="font-size:10px;">

應該:

<p:dataTable id="CustomerTable" var="customer"
    rowKey="#{customer.id}"
     selection="#{purchasesDAO.selectedCustomerRow}"
     widgetVar="customerTableSearch"
     filteredValue="#{purchasesDAO.filteredCustomerRow}"
     selectionMode="single" value="#{purchasesDAO.customerList}"
     style="font-size:10px;">

這是由於在開發期間復制/粘貼代碼而導致的,並且在更新代碼時缺少了widgetVar行。 將客戶數據表中的widgetVar更改為與購買表不同可以解決此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM