jsf - 关闭所有面板并使用 p:ajax 更新动态 p:accordionPanel
问题描述
我想关闭所有面板并更新动态PrimeFaces 8 p:accordionPanel
。我尝试p:ajax onstart
使用小部件 var 关闭所有面板。这确实会关闭它们,但在更新后它们会再次打开。没有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"/>
推荐阅读
- swift - 如何从头开始填充集合视图 - 快速 - 以编程方式
- amazon-web-services - 从公共 API 网关调用私有 API 网关
- python - GPU 问题 TensorFlow 2.4.1
- python - CuPy - 多个函数会导致多个内核吗?
- excel - 单击 Intranet 网页上的复选框在使用 Internet Explorer 11 的 VBA 中不起作用
- java - Junit:mockMvc 标头不允许使用 Cookie?
- python - Google Colaboratory-空白页问题
- python - 根据另一个csv选择一个csv的一个子部分
- rust - 使用 Any 时如何处理“类型不满足所需的生命周期”?
- javascript - 如何以角度获取对象的键和值