我有一个简单的2列懒惰数据模型。第二列仅包含默认情况下处于禁用状态的复选框(无法单击它们)。在行选择中,我只希望启用复选框(checkbox.disabled = false)而不调用load方法-因为我的数据没有更改,因此无需请求数据库。问题是,当我更新dataTable以将checkbox.disabled更改为false时,则调用RENDER_PHASE并调用load方法,如果我不更新数据表,则始终禁用该复选框。我如何才能使其协同工作?

更新:

<h:form id="form-id">
            <p:dataTable var="element"
                         id="data-table-id"
                         value="#{view.elements}"
                         lazy="true"
                         paginator="true"
                         paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
                         selectionMode="single"
                         rows="5"
                         rowsPerPageTemplate="5,10,15,30"
                         selection="#{view.selectedElement}">

                <p:ajax event="rowSelect"
                        listener="#{view.someMethod()}"
                        update="checkbox"/>

                <p:column headerText="Element"
                          width="300">
                    <h:outputText value="#{element.name}"/>
                </p:column>


                <p:column headerText="Active"
                          width="300">
                    <p:selectBooleanCheckbox id="checkbox"
                            disabled="#{view.selectedElement.id ne element.id}"
                            value="#{element.active}"/>
                </p:column>
            </p:dataTable>
        </h:form>


当我放入update="form-id"时,将启用活动复选框-但正如我所说,调用load方法是什么不良行为

最佳答案

如果您说update =“ form-id”,这就是JSF的工作方式JSF将重新渲染整个表单,包括重建数据表,从而调用您的load方法。

听起来像想要更新单行检出OmniFaces Ajax.updateRow方法。

例如,JSF ...

<p:dataTable binding="#{myDataTable}"

<p:commandButton value="Update" action="#{ajaxBean.updateRow(myDataTable, 0)}" />


Java:

public void updateRow(UIData table, int index) {
   Ajax.updateRow(table, index);
}

10-07 19:11
查看更多