首先,我要感谢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>
答案 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>