Html 更新手风琴时,它不会';t按住打开/关闭选项卡
我的手风琴有个大问题。 我有一个带有标题的输出面板和一个带有两个标签的手风琴。 如果关闭第一个选项卡并更改第二个选项卡中的字段,则会打开第一个选项卡并关闭第二个选项卡。如何保持选项卡的状态 这是一个简单的例子:Html 更新手风琴时,它不会';t按住打开/关闭选项卡,html,primefaces,xhtml,accordion,Html,Primefaces,Xhtml,Accordion,我的手风琴有个大问题。 我有一个带有标题的输出面板和一个带有两个标签的手风琴。 如果关闭第一个选项卡并更改第二个选项卡中的字段,则会打开第一个选项卡并关闭第二个选项卡。如何保持选项卡的状态 这是一个简单的例子: <p:outputPanel id="content"> <p:outputPanel id="header" /> <p:accordionPanel multiple="true"> <p:tab title
<p:outputPanel id="content">
<p:outputPanel id="header" />
<p:accordionPanel multiple="true">
<p:tab title="firstTab">
<p:panel>
<p:inputText id="firstInput" value="firstInput">
<p:ajax event="change" update="content" />
</p:inputText>
</p:panel>
</p:tab>
<p:tab title="secondTab">
<p:panel>
<p:inputText id="secondInput" value="secondInput">
<p:ajax event="change" update="content" />
</p:inputText>
</p:panel>
</p:tab>
</p:accordionPanel>
</p:outputPanel>
我如何解决它?有什么建议吗?AccordionPanel有一个名为activeIndex的属性,您可以从MB中设置此属性,以便在更新后不会更改。例如,根据cagatay civici在@Christian中提供的答案,我创建了一个简单的示例,因为它对我来说不是现成的 example.xthml: 说明: 如果选项卡打开(“tabChange”)或关闭(“tabClosed”),两个ajax标记会触发POST请求,因为这是accordionPanel的默认操作。因此,我用
h:form
包装了p:accordionPanel
。如果检查网络流量,可以看到活动选项卡列表是如何发送到服务器的
请记住,我更新了周围的表单,而不是手风琴面板本身。因此,我使用。您好,我注意到了该属性,但每次打开/关闭选项卡时,我都需要手动更新该属性。在我的真实案例中,我有6个手风琴和总共15个标签,所以这有点难。还有别的办法吗?你说的手动是什么意思?也许ajax事件tabChange或tabClose会有所帮助是的,我的意思是使用事件tabChange和tabClose。当我加载页面或更新面板时,我有activeIndex=(0)。然后,如果我关闭第一个选项卡,我需要将索引更新为(),如果我打开第二个选项卡,activeIndex应该是(1)。但是,我只能为每个选项卡和每个事件使用Java方法。e、 g.如果我关闭第一个选项卡,则从活动索引中删除0,如果我打开它,则添加0,如果我关闭第二个选项卡,则删除1,如果我打开它,则添加1。有什么简单的方法可以做到这一点吗?cagatay.civici的答案可能会对你有所帮助
<h:form styleClass="accordionForm">
<p:accordionPanel multiple="true"
activeIndex="#{sessionBean.activeTabs}">
<p:ajax event="tabChange" />
<p:ajax event="tabClose" />
<p:tab title="Tab1">
<p:panel>
<p:inputText id="firstInput" value="firstInput">
<p:ajax event="change" update="@(.accordionForm)" />
</p:inputText>
</p:panel>
</p:tab>
<p:tab title="Tab2">
<p:panel>
<p:inputText id="secondInput" value="secondInput">
<p:ajax event="change" update="@(.accordionForm)" />
</p:inputText>
</p:panel>
</p:tab>
</p:accordionPanel>
</h:form>
@Named("sessionBean")
@SessionScoped
public class SessionBean implements Serializable {
private static final long serialVersionUID = 1L;
private String activeTabs = "";
public String getActiveTabs() {
return activeTabs;
}
public void setActiveTabs(String activeTabs) {
this.activeTabs = activeTabs;
}
}