轮询更新后无法关闭columntoggler

时间:2016-04-25 10:30:09

标签: jquery jsf primefaces jsf-2.2

首先,我要感谢Stack溢出是如此棒,回答几乎所有我们需要的东西。但是我又坚持了一些东西需要帮助。我的问题是我的columntoggler在右上方没有关闭按钮(所以,当p:poll更新数据表时,切换不会关闭,每次我都要刷新整个页面:()。那么,我们需要jquery来添加那个或者什么我做错了。请建议我。谢谢你

<h:form rendered="#{bean.value!=null}"  >

    <p:dataTable id="tab" var="var" value="#{bean.value}" >

                 <f:facet name="header">
                    Header for dataTable
                    <p:commandButton style="float:right" id="toggler" type="button" value="Columns"  icon="ui-icon-calculator" />
                    <p:columnToggler datasource="tab" trigger="toggler">
                     <p:ajax event="toggle" listener="#{bean.onToggle}" />

                        </p:columnToggler>


                 </f:facet>
    <p:column visible="#{bean.list[0]}">
            <f:facet name="header"><h:outputText value="Start"/>
            </f:facet>
            <h:outputText value="#{var.startTime}">
                <f:convertDateTime pattern="dd.MM.yyyy" />
            </h:outputText>
        </p:column>

        <p:column visible="#{bean.list[1]}">
            <f:facet name="header"><h:outputText value="End"/>
            </f:facet>
            <h:outputText value="#{var.endTime}" >
                <f:convertDateTime pattern="dd.MM.yyyy"  />
            </h:outputText>
        </p:column>

        <p:column visible="#{bean.list[2]}">
            <f:facet name="header"><h:outputText value="Name"/>
            </f:facet>
            <h:outputText value="#{var.name}" >

            </h:outputText>
        </p:column>

        </p:dataTable>

        <p:poll interval="10"  update="tab" />
   </h:form>

2 个答案:

答案 0 :(得分:0)

您应该为columnToggler指定一个名称,以便您可以使用PF(&#39; columnToggler&#39;)访问它,如下所示:

<p:columnToggler widgetVar="columnToggler" datasource="tab" trigger="toggler"/>

您可以使用PF()和/或jquery隐藏columnToggler。我发现当Toggler列打开时更新表时,它有多个副本,所以你需要用jquery关闭它们。

<p:poll inteval="10" update="tab" 
        oncomplete="PF('columnToggler').hide();$('.ui-columntoggler').hide();" />

我还没有通过民意调查尝试过,但我用p:ajax。

答案 1 :(得分:0)

案例1 :当触发“切换事件”时,您可以使用PF('widgetVar').hide使用onstart()/oncomplete()等关闭columnToggler。

<p:columnToggler datasource="tab" trigger="toggler" widgetVar="colTogglerWidgetVar">
                 <p:ajax event="toggle" listener="#{bean.onToggle}"  
                  onstart="PF('colTogglerWidgetVar').hide();" />
</p:columnToggler>

案例2 您可以使用columnToggler,即使在使用PF().hide仅使用onstart()事件触发切换事件时更新表格!因为当你更新表时,一组新的元素被添加到具有相同签名的页面,但仍然对你开放的columnToggler将是旧的,因此如果你尝试使用关闭按钮关闭columnTogller,它赢了不要。由于对话框已失去其当前状态的范围。

因此除了onstart()之外的任何其他事件都不会达到目的。

<p:columnToggler datasource="tab" trigger="toggler" widgetVar="colTogglerWidgetVar">
                 <p:ajax event="toggle" listener="#{bean.onToggle}"   
                 onstart="PF('colTogglerWidgetVar').hide();" update="datatable"/>
</p:columnToggler>

如果您希望保持对话框处于打开状态,即使您隐藏了columnToggler,也可以使用PF().show onComplete()组合再次显示columnToggler

<p:columnToggler datasource="tab" trigger="toggler" widgetVar="colTogglerWidgetVar">
                 <p:ajax event="toggle" listener="#{bean.onToggle}"   
                 onstart="PF('colTogglerWidgetVar').hide();" 
                 oncomplete="PF('colTogglerWidgetVar').show();" update="datatable"  />
</p:columnToggler>