jsf - PrimeFaces dataTable 在 Ajax 请求后未更新

标签 jsf primefaces

我目前正在使用 PrimeFaces 数据表,并在用户添加数据表后立即无休止地尝试向数据表附加一个新数据。服务器端,一切正常——数据同时保存到数据库和硬盘中。我希望在请求成功后看到部分页面更新,但我似乎无法让它工作。这是我的 XHTML 代码:

<div class="content">
        <div id="mainContent">

            <div class="topNav">
                <h:form id="navForm">
                    <p:commandButton value="Upload"/>
                    <p:commandButton value="New Folder" onclick="createDlg.show();" />
                    <p:commandButton value="Delete Folder" action="#" />
                </h:form>
            </div>

            <div id="filePanel">
                <h:form id="dataTable" prependId="false">     
                    <p:dialog header="Create" widgetVar="createDlg" modal="true" height="200">

                        <p:panel header="New Folder">
                            <h:panelGrid columns="2">
                                <h:outputLabel value="Name:" for="txt_name"></h:outputLabel>
                                <p:inputText id="txt_name" value="#{directoryController.newDir.name}" required="true" />
                                <p:commandButton value="Create" actionListener="#{directoryController.createNew}" update="dGrid" oncomplete="createDlg.hide();"/>
                                <p:ajaxStatus style="width:16px; height:16px;">
                                    <f:facet name="start">
                                        <h:outputText value="Saving..." />
                                    </f:facet>
                                    <f:facet name="">
                                        <h:outputText value="Complete." />
                                    </f:facet>
                                </p:ajaxStatus>
                            </h:panelGrid>
                        </p:panel>

                    </p:dialog>
                    <p:dataTable id="dGrid" value="#{directoryController.itemsByOwner}" var="dir">
                        <p:column selectionMode="multiple"/>
                        <p:column sortBy="#{dir.name}">                                
                            <f:facet name="header">
                                File Name
                            </f:facet>
                            <h:outputText value="#{dir.name}" />
                        </p:column>
                        <p:column>
                            <f:facet name="header">
                                File Size
                            </f:facet>
                        </p:column>
                    </p:dataTable>                                
                </h:form>                    
            </div>
        </div>
    </div>

最后,这是我的支持 bean。
public String createNew(){
    newDir.setDateCreated(new Date());
    newDir.setDateModified(new Date());
    newDir.setId(BigDecimal.ZERO);
    newDir.setLocation(ROOT_DIRECTORY + currentUser.getUsername() + "/");
    newDir.setFilesCollection(f);
    newDir.setDescription("");
    newDir.setOwner(currentUser);
    current = newDir;
    create();
    persistDirectoryFromObject(newDir);
    newDir = new Directory();
    RequestContext.getCurrentInstance().addPartialUpdateTarget("dGrid");


    return null;
}

最佳答案

如果您使用的是 3.0.M4,您可以这样做:

...

...

<p:outputPanel autoUpdate="true">

                <p:dataTable id="dGrid" value="#{directoryController.itemsByOwner}" var="dir">
                    <p:column selectionMode="multiple"/>
                    <p:column sortBy="#{dir.name}">                                
                        <f:facet name="header">
                            File Name
                        </f:facet>
                        <h:outputText value="#{dir.name}" />
                    </p:column>
                    <p:column>
                        <f:facet name="header">
                            File Size
                        </f:facet>
                    </p:column>
                </p:dataTable>    
</p:outputPanel>

或者你可以简单地:
<p:commandButton value="Create" action="#{directoryController.createNew}" oncomplete="createDlg.hide();" ajax="false" />

关于jsf - PrimeFaces dataTable 在 Ajax 请求后未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7013574/

相关文章:

jsf - :selectOneMenu in p:dataTable doesn't submit its value

javascript - 单击按钮后在 css 弹出窗口中填充值

mysql - 验证 JSF 实体中的持久日期

jsf - 如何有条件地为表格单元格中的背景着色?

java - 使用 p :calendar (no validation) 相互限制开始和结束日期时间

java - p :inputText in p:dialog return empty values to bean

css - 将样式定义为 p :clock element in primefaces

java - JSF - prependId 不工作?

ajax - JSF同时ajax调用

jquery - 焦点在几个<p :inputNumber>之间自动跳转