簡體   English   中英

Ajax表單刷新后,Primefaces commandButton不顯示對話框

[英]Primefaces commandButton is not showing dialog after ajax form refresh

我需要您的幫助和指導,以解決使用Ajax刷新表單后顯示dialog的問題。 我有一個dataTable ,它顯示了許多請求,並且在commandButton視圖的onclick上將顯示一個包含一些信息的dialog dialog關閉時,將刷新表單,並且dataTable將從數據庫中獲取更新的信息。 但是,這將是第一次顯示該對話框,並通過關閉dialog刷新表單。

如果我嘗試第二次再次單擊視圖commandButton ,則commandButton將不會顯示任何對話框,並且似乎也不會執行任何操作。 即使是日志也沒有顯示任何內容。

這是我的xhtml:

<h:form id="Requests">
    <p:dataTable id="PendingRequests" var="hr" value="#{hrd.pendingRequests}"
            filteredValue="#{hrd.filteredPendingRequests}">
        <p:column headerText="Req. Date" sortBy="#{hr.requestDate}"
                filterMatchMode="contains" filterBy="#{hr.requestDate}">
            <h:outputText value="#{hr.requestDate}" />
        </p:column>
        <p:column>
            <f:facet name="header">View</f:facet>
            <p:commandButton id="submitbutton" update=":Requests:#{hr.dialogueName} "
                    oncomplete="PF('#{hr.certificateDialogue}').show()" icon="ui-icon-search"
                    title="View">
                <f:setPropertyActionListener value="#{hr}" target="#{hrd.selectedRequest}" />
            </p:commandButton>
        </p:column>
    </p:dataTable>
    <p:dialog id="CertificateDialog" header="Cert1" widgetVar="CertificateDialog">
        <p:ajax event="close" update=":Requests" listener="#{hrd.UpdateDatatable}" />
    </p:dialog>
</h:form>

該方法將在dialog onclose上調用。UpdateDatatable方法代碼為:

listPendingRequests.clear();
listPendingRequests = new ArrayList<PendingRequests>();
PreparedStatement ps = null;
String sql = "";

try {
    con = DBConn.getInstance().getConnection("jdbc/hr");

    // SQL Statement
    ps = con.prepareStatement(sql);
    ResultSet result = ps.executeQuery();
    while (result.next()) {
        PendingRequests pendingList = new PendingRequests();

        requestDate = result.getString("REQ_DT");

        pendingList.setRequestDate(requestDate);

        listPendingRequests.add(pendingList);

        RequestContext.getCurrentInstance().update("Requests");
    }
} catch (Exception e) {
    System.err.print(e);
    e.printStackTrace();
}

對話框在HTML DOM和JavaScript中有特殊處理。 當您仍處於同一視圖中時,永遠不要ajax更新對話框的任何父級。 否則,您可能最終會出現重復的對話框和JS中的沖突。 此外, 強烈建議您為每個對話框提供自己的形式,如<p:dialog><h:form>以避免初學者感到困惑和誤用,但是由於您希望在其上使用ajax close事件,因此您可以'請避開使用<h:form><p:dialog> 但是,您以相同的形式放置了其他內容,甚至對它進行了ajax更新。 這是不對的。

將表單與對話框本身聯系起來,不要在上面添加其他內容。 換句話說,拆分當前形式。

<h:form id="requests">
    <p:dataTable ...>
        ...
    </p:dataTable>
</h:form>
<h:form>
    <p:dialog ...>
        <p:ajax event="close" ... update=":requests" />
    </p:dialog>
</h:form>

暫無
暫無

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

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