【问题标题】:update primefaces or jsf view after ajax call on submit button在提交按钮上的 ajax 调用后更新 primefaces 或 jsf 视图
【发布时间】:2013-10-22 13:45:35
【问题描述】:

我试图在 ajax 命令按钮请求后更新一个 primefaces 表单(向导第一步)但没有成功。进行实际 ajax 调用的命令按钮位于对话框中。我想在提交请求后强制我的视图刷新。

命令按钮从数据表中删除一条记录。它工作正常,记录被删除,但是当对话框被隐藏时,数据表继续显示已删除的记录。我想以某种方式强制它刷新。有任何想法吗?我可以通过我的支持 bean reviewManagerBean.deleteProtocol() 方法来做吗?

这是代码(我的 BackBean 是 viewScoped):

<h:form id="reviewManagerForm">
...     
<pe:masterDetail id="masterDetail" level="#{reviewManagerBean.currentLevel}" showBreadcrumb="false" selectLevelListener="#{reviewManagerBean.levelListener}" >
    <f:facet name="header" >
        <h:panelGroup layout="block" style="margin-top: 10px;" >
            <h:panelGroup styleClass="levelTitle ui-state-default ui-corner-all wizard-breadcrumbs#{reviewManagerBean.currentLevel eq 1 ? 'ui-state-hover' : ''}">
                <h:outputText value="1: Protocol picker"/>
            </h:panelGroup>
            ...
            <p:messages id="mainMessagesPanel" showDetail="true" closable="true" />
        </h:panelGroup>         
    </f:facet>
    <pe:masterDetailLevel level="1">        
        <p:panel id="panel1" header="List of available protocols">                
            <p:dataTable id="protocolsDataTable" var="cRProtocol" rowKey="#{cRProtocol.revProtId}" value="#{reviewManagerBean.cRReviewProtocolList}"
                widgetVar="protocolsTable" 
                ...
                selection="#{reviewManagerBean.selectedReviewProtocol}" 
                selectionMode="single" >
                ...
                <p:ajax event="rowSelect" listener="#{reviewManagerBean.setSelectedRow}" />
                <p:ajax event="rowUnselect" listener="#{reviewManagerBean.unsetSelectedRow}"/>
                ...
                <p:column sortBy="#{cRProtocol.revProtTitle}" headerText="Title" style="width:200px;text-align:center;">
                    <h:outputText value="#{cRProtocol.revProtTitle}" />
                </p:column>
                ...
                <p:column>
                    <p:commandButton value="Delete" onclick="dlg5.show()"
                        update=":reviewManagerForm:deleteSingleProtocol"
                        disabled="#{reviewManagerBean.checkifProtocolIsOpen(cRProtocol)}"
                        ajax="true" process=":reviewManagerForm:deleteSingleProtocol" />                 
                </p:column>         
            </p:dataTable>                
        </p:panel>
    ...
    <p:dialog id="dialog-deleteprotocol" header="Delete Image Type" widgetVar="dlg5" dynamic="true"  modal="true" resizable="false">                
        <p:panelGrid id="deleteSingleProtocol">
        <p:row>
            <p:column>  
                <h:outputText value="Id:" style="font-weight:bold; padding-right:10px" />
            </p:column>
            <p:column>
                <h:outputText value="#{reviewManagerBean.selectedReviewProtocol.revProtId}" />  
            </p:column>
        </p:row>
        ...
            <p:column>
                <p:commandButton id='protocolDelete' 
                    value='Delete'
                    action='#{reviewManagerBean.deleteProtocol()}'                                                          
                    ajax="true"
                    onclick="dlg5.hide()" icon="ui-icon-disk" 
                    update=":reviewManagerForm:protocolsDataTable"
                    process=":reviewManagerForm:deleteSingleProtocol" />  
            </p:column>
        </p:row>
    </p:panelGrid>              
</p:dialog>

【问题讨论】:

  • 你的数据表应该被正确地重新渲染,否则你会得到一个异常。这意味着#{reviewManagerBean.cRReviewProtocolList} 将再次被调用。您是否从该列表中删除该项目?否则,这应该是问题所在。您应该从#{reviewManagerBean.deleteProtocol 刷新列表。
  • 你是对的 Magnilex ......我的想法被卡住了!谢谢
  • 太棒了。将此作为答案发布,以便您可以接受并将问题标记为已解决。

标签: jsf jsf-2 primefaces


【解决方案1】:

你的数据表应该被正确地重新渲染,否则你会得到一个异常(像 id 为:reviewManagerForm:protocolsDataTable 的组件找不到)。

这意味着#{reviewManagerBean.cRReviewProtocolList} 将再次被调用。您需要从该列表中删除该项目。这是从#{reviewManagerBean.deleteProtocol} 适当地完成的。

当删除后调用#{reviewManagerBean.cRReviewProtocolList} 时,您的数据表将得到更新。

【讨论】:

    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 2014-08-29
    • 2020-06-10
    • 2014-06-11
    • 2020-01-20
    相关资源
    最近更新 更多