【发布时间】:2017-06-26 05:12:17
【问题描述】:
Primefaces 6.0。我知道应该使用 p:remoteCommand 的更新属性来指定应该由 AJAX 更新的组件的 clientIds。我试图了解 PF 是如何工作的。与 DataTable 结合使用,它似乎没有按预期工作。当我尝试直接设置update="form:dataTable:2:bColumn" 时,它没有效果。但是,这样做(在下面的代码中注释掉)RequestContext.getCurrentInstance().update("form:dataTable:2:bColumn"); 将强制 PF 更新指定的 outputText。
为什么会这样?我很乐意接受技术解释 - 我正在尝试通过调试 PF Java/Javascript 源来找到答案。
<h:form id="form">
<p:remoteCommand name="remoteCall"
action="#{grid4.onEdit}"
update="form:dataTable:2:bColumn"
/>
<p:dataTable id="dataTable"
var="gridItem"
value="#{grid4.gridItems}"
editable="true" editMode="cell"
>
<p:ajax event="cellEdit"
oncomplete="remoteCall()">
</p:ajax>
<p:column headerText="A">
<p:cellEditor>
<f:facet name="output"><h:outputText value="#{gridItem.a}" /></f:facet>
<f:facet name="input"><p:inputText value="#{gridItem.a}"/></f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="B">
<h:outputText id="bColumn" value="#{gridItem.b}" />
</p:column>
</p:dataTable>
</h:form>
豆子
@ManagedBean
@ViewScoped
public class Grid4 {
private List<GridItem> gridItems = new ArrayList<>();
public Grid4() {
gridItems.add(new GridItem("1", "a","b"));
gridItems.add(new GridItem("2", "a","b"));
gridItems.add(new GridItem("3", "a","b"));
}
public void onEdit() {
System.out.println("onEdit()");
gridItems.get(2).setB("CHANGED VALUE");
// RequestContext.getCurrentInstance().update("form:dataTable:2:bColumn");
}
public List<GridItem> getGridItems() {
return gridItems;
}
public void setGridItems(List<GridItem> gridItems) {
this.gridItems = gridItems;
}
}
【问题讨论】:
标签: jsf primefaces datatable