【问题标题】:JSF, Primefaces LazyDataModel - update row without invoking load methodJSF,Primefaces LazyDataModel - 更新行而不调用加载方法
【发布时间】:2019-02-10 15:28:46
【问题描述】:

我有一个包含 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 方法被调用,这是不受欢迎的行为

【问题讨论】:

  • 不更新整个数据表,只更新复选框怎么样?
  • 因为load 方法在我更新整个表时被调用:/
  • 这就是为什么我说你不需要更新数据表。简单的更新复选框。
  • 我在问题中添加了代码,你能检查我是否做错了吗?

标签: java jsf primefaces


【解决方案1】:

这就是 JSF 的工作方式,如果你说 update="form-id" 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);
}

【讨论】:

  • 是的,我只需要更新特定的行就可以了:]
猜你喜欢
  • 2021-11-02
  • 1970-01-01
  • 2016-05-27
  • 2012-03-08
  • 2019-02-21
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多