我有一个简单的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
方法会被调用,这是不受欢迎的行为
答案 0 :(得分:4)
如果您说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);
}