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;
    }
}