Ajax 仅在accordion Primefaces的选项卡上更新

Ajax 仅在accordion Primefaces的选项卡上更新,ajax,jsf-2,primefaces,accordion,Ajax,Jsf 2,Primefaces,Accordion,我有一个手风琴,有很多标签。选项卡标题设置为CSS类。这将使背景色变为绿色或红色,具体取决于订单中的所有物品是否已交付 每篇文章都有一个SelectBoolean按钮,每次更改这些按钮时,实际的选项卡都应该得到更新 问题是:如何只更新一个选项卡?当我更新整个手风琴时,第一个选项卡打开,另一个选项卡关闭 <p:accordionPanel id="ordersAccordion" cache="true" value="#{ordersBean.orders}" var="order">

我有一个手风琴,有很多标签。选项卡标题设置为CSS类。这将使背景色变为绿色或红色,具体取决于订单中的所有物品是否已交付

每篇文章都有一个SelectBoolean按钮,每次更改这些按钮时,实际的选项卡都应该得到更新

问题是:如何只更新一个选项卡?当我更新整个手风琴时,第一个选项卡打开,另一个选项卡关闭

<p:accordionPanel id="ordersAccordion" cache="true" value="#{ordersBean.orders}" var="order">
        <p:tab
            titleStyleClass="#{ordersBean.isOrderDelivered(order) ? 'ui-accordion-tab-delivered' : 'ui-accordion-tab-undelivered'}"
            title="##{order.order_id} | #{order.printableOrderDate}  | #{order.printableOrderTime} | #{order.user} | #{order.getDestination().toString()}">
            <p:dataTable value="#{order.demands}" var="demand">
                <p:column headerText="Artikel Nr.">
                    <p:outputLabel value="#{demand.article.articleNumber}" />
                </p:column>
                <p:column headerText="Name">
                    <p:outputLabel value="#{demand.article.name}" />
                </p:column>
                <p:column headerText="Beschreibung">
                    <p:outputLabel value="#{demand.article.description}" />
                </p:column>
                <p:column headerText="Haus">
                    <p:outputLabel value="#{demand.house.getLabel()}" />
                </p:column>
                <p:column headerText="Anzahl">
                    <p:outputLabel value="#{demand.quantity}" />
                </p:column>
                <p:column headerText="Mitarbeiter">
                    <p:outputLabel value="#{demand.employee}" />
                </p:column>
                <p:column headerText="Lieferstand" width="150" style="text-align: center">
                    <p:selectBooleanButton id="deliverdBtn" value="#{demand.delivered}" onLabel="Geliefert" offLabel="Geliefert" onIcon="ui-icon-check"
                        offIcon="ui-icon-close">
                        <p:ajax listener="#{ordersBean.saveDelivered(demand)}" update=":allOrders:ordersAccordion" />
                    </p:selectBooleanButton>
                </p:column>
            </p:dataTable>
        </p:tab>
</p:accordionPanel>

AccordionPanel有一个activeIndex属性,可用于处理当前选项卡。您应该能够执行以下操作:

<p:ajax listener="#{ordersBean.saveDelivered(demand)}" update=":allOrder:ordersAccordion:tab#{ordersAccordion.activeIndex}" />


如果选项卡未处于活动状态(当所有选项卡都处于非活动状态时),则会出现错误。因此,此解决方案不完整。此答案是在ajax元素位于选项卡内部的情况下给出的,这意味着该选项卡必须处于活动/打开状态。它不是从外部更新选项卡的解决方案,在这里处理相同的问题: