Primefaces 6.0. Я понимаю, что атрибут обновления p: remoteCommand должен использоваться для указания clientIds компонентов, которые должны быть обновлены AJAX. Я пытаюсь понять, как работает PF. В сочетании с DataTable он работает не так, как ожидалось. Когда я пытаюсь установить update="form:dataTable:2:bColumn"
, он не имеет никакого эффекта. Однако, делая это (прокомментированный в приведенном ниже коде) RequestContext.getCurrentInstance().update("form:dataTable:2:bColumn");
заставит PF обновить указанный выходной текст.Как обновить атрибут p: remoteCommand works
Почему это происходит? Я буду рад за техническое объяснение. Я пытаюсь найти ответ, отлаживая источники 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>
Bean
@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;
}
}
Решения, которые вы предоставили, не работают. После дополнительной отладки я узнал, что remoteCommand неправильно переводится в HTML. В сгенерированном HTML я могу видеть remoteCall = function() {PrimeFaces.ab ({s: "form: j_idt4", f: "form", u: "form: dataTable: bColumn", pa: arguments [0]}) ;}. Обратите внимание, что номер строки отсутствует. После отладки исходного кода PF он выглядит как ошибка. Код генерирует этот «clientId», сначала просматривая компонент (текстовое поле вывода). Но после того, как он находит это, есть некоторый побочный эффект, который сводит на нет поле clientId. –
Это вопрос о separte. Значение атрибута обновления в вашем вопросе неверно в том, как я описываю в своем ответе. – Kukeltje