JSF ajax组件在表外更新不起作用



我有下面的代码,表外的任何组件都不会在ajax调用中更新。组件"lms凭单errordiv"和其他组件外部数据不更新。我尝试了很多方法,但都不起作用。请帮忙。"form"是表单id

<h:panelGroup id="lms-prestige-inner-div" layout="block"
            styleClass="lmsPricePlanInnerDiv">
            <table class="pricePlanTable">
                <ui:repeat var="vo" value="#{orderOverviewBean.prestigeVouchers}"
                    varStatus="status">
                    <ui:fragment rendered="#{status.index > 0}">
                        <tr>
                            <td colspan="2">
                                <h2 class="#{vo.atLeastOneItemSelected ? 'remove' : 'redeem'}">
                                    <span
                                        class="#{vo.atLeastOneItemSelected ? 'removeline-center' : 'redeemline-center'}">or</span>
                                </h2>
                            </td>
                        </tr>
                    </ui:fragment>
                    <tr>
                        <td style="width: 302px">Voucher
                            #{status.index+1}.$#{-vo.amount} expires on
                            &nbsp;#{vo.expireDate}</td>
                        <td class="spanDisable"><h:commandLink value="> Redeem"
                                styleClass="removeUnderline" rendered="#{not vo.selected}"
                                disabled="#{vo.atLeastOneItemSelected}"
                                action="#{orderOverviewBean.addPrestigeVoucher}">
                                <f:setPropertyActionListener
                                    target="#{orderOverviewBean.selectedVoucherItem}"
                                    value="#{vo}" />
                                <f:ajax
                                    render=":form:total-price-container :form:lms-vouchers-error-div :form:lms-prestige-div"
                                    onevent="lmsVoucherDisplayLoader.displayLoader" />
                            </h:commandLink> <h:commandLink value="> Remove" styleClass="removeUnderline"
                                rendered="#{vo.selected}"
                                action="#{orderOverviewBean.removePrestigeVoucher}">
                                <f:setPropertyActionListener
                                    target="#{orderOverviewBean.selectedVoucherItem}"
                                    value="#{vo}" />
                                <f:ajax
                                    render=":form:total-price-container :form:lms-vouchers-error-div :form:lms-prestige-div"
                                    onevent="lmsVoucherDisplayLoader.displayLoader" />
                            </h:commandLink></td>

                        <ui:fragment rendered="#{vo.selected}">
                            <td style="width: 350px; text-align: right;">
                                -$#{-vo.amount}</td>
                        </ui:fragment>
                    </tr>
                </ui:repeat>
            </table>
        </h:panelGroup>

导致此类问题的一个常见错误是有条件地呈现ajax/可更新容器:

即:如果您尝试使用ajax更新此容器:

<ui:fragment id="lms-vouchers-error-div" rendered="#{false_condition}"/>

即使在ajax/更新过程中呈现的条件变为true,它也不会被呈现,因为它在以前的html生成的代码中不存在,所以,请尝试用<h:panelGroup/>包装(在"始终可见的包装容器"中)您的条件容器,或者如果您使用primefaces <p:outputPanel/>

即:

<h:panelGroup id="target_to_update_with_ajax">
    <ui:fragment id="lms-vouchers-error-div" rendered="#{condition}"/>
</h:panelGroup>

这是一个可能适用于您的案例的建议,但如果您发布代码的其余部分,它会更清楚。

最新更新