关闭所有面板并使用 p:ajax 更新动态 p:accordionPanel
Close all panels and update a dynamic p:accordionPanel using p:ajax
我想关闭所有面板并更新 动态 PrimeFaces 8 p:accordionPanel
。我尝试使用小部件 var 关闭 p:ajax onstart
中的所有面板。这确实关闭了它们,但在更新后它们再次打开。没有 dynamic="true"
它确实有效(即使没有 onstart
)。这在 XHTML 中很容易修复吗,还是我在看这里的错误?
<h:form id="main">
<p:dataTable value="#{appointments.lazy}"
lazy="true"
var="appo"
rowKey="#{appo.id}"
selectionMode="single"
selection="#{appointments.selected}"
rows="10">
<p:column headerText="#{msg.date}">#{appo.startTime}</p:column>
<p:ajax event="rowSelect"
onstart="var a=PF('acc');for(i=0;i<a.panels.length;i++){a.unselect(i)}"
update="main:acc"/>
</p:dataTable>
<p:accordionPanel id="acc"
widgetVar="acc"
dynamic="true"
multiple="true"
activeIndex="">
<p:tab title="#{now}">#{now}</p:tab>
<p:tab title="#{now}">#{now}</p:tab>
</p:accordionPanel>
</h:form>
我最终在 p:ajax
上使用监听器来重置活动索引:
public void resetActivePanels() {
org.omnifaces.util.Components
.findComponentsInCurrentForm(AccordionPanel.class)
.get(0)
.setActiveIndex("");
}
这也消除了在开始时先关闭每个面板的需要:
<p:ajax event="rowSelect"
listener="#{appointments.resetActivePanels()}"
update="main:acc"/>
我想关闭所有面板并更新 动态 PrimeFaces 8 p:accordionPanel
。我尝试使用小部件 var 关闭 p:ajax onstart
中的所有面板。这确实关闭了它们,但在更新后它们再次打开。没有 dynamic="true"
它确实有效(即使没有 onstart
)。这在 XHTML 中很容易修复吗,还是我在看这里的错误?
<h:form id="main">
<p:dataTable value="#{appointments.lazy}"
lazy="true"
var="appo"
rowKey="#{appo.id}"
selectionMode="single"
selection="#{appointments.selected}"
rows="10">
<p:column headerText="#{msg.date}">#{appo.startTime}</p:column>
<p:ajax event="rowSelect"
onstart="var a=PF('acc');for(i=0;i<a.panels.length;i++){a.unselect(i)}"
update="main:acc"/>
</p:dataTable>
<p:accordionPanel id="acc"
widgetVar="acc"
dynamic="true"
multiple="true"
activeIndex="">
<p:tab title="#{now}">#{now}</p:tab>
<p:tab title="#{now}">#{now}</p:tab>
</p:accordionPanel>
</h:form>
我最终在 p:ajax
上使用监听器来重置活动索引:
public void resetActivePanels() {
org.omnifaces.util.Components
.findComponentsInCurrentForm(AccordionPanel.class)
.get(0)
.setActiveIndex("");
}
这也消除了在开始时先关闭每个面板的需要:
<p:ajax event="rowSelect"
listener="#{appointments.resetActivePanels()}"
update="main:acc"/>