JSF,Primefaces LazyDataModel - 无需调用加载方法更新行

问题描述 投票:1回答:1

我有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方法被调用的是不良行为

java jsf primefaces
1个回答
4
投票

这只是如果你说更新=“形式-ID” JSF将重新呈现整个表格,包括重建你的数据表中哪些从而调用你的加载方法JSF的工作方式。

这听起来像你想要的是更新单行退房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);
}
© www.soinside.com 2019 - 2024. All rights reserved.