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

时间:2014-11-05 12:03:30

标签: ajax jsf

我有下面的代码,边表中的任何组件都不会在ajax调用中更新。组件" lms-vouchers-error-div"和其他组件外部数据没有更新。我尝试了很多方法,但它不起作用。请帮忙。"表格"是表单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>

1 个答案:

答案 0 :(得分:0)

导致此类问题的常见错误是使ajax / updatable容器有条件地呈现:

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

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

即使渲染条件在您的ajax / update过程中变为true,它也不会被渲染,因为它不存在于您之前的html生成代码中,所以相反,尝试换行(在&#中) 39;始终可见包装容器&#39;)条件容器,<h:panelGroup/>或使用primeface <p:outputPanel/>

即:

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

这是一个可能适用于您的情况的建议,但如果您发布其余代码,则会更清楚。