如何通过p:Ajax使用OmniFaces Ajax.updateColumn()或Ajax.updateRow()

如何通过p:Ajax使用OmniFaces Ajax.updateColumn()或Ajax.updateRow(),ajax,jsf,primefaces,omnifaces,Ajax,Jsf,Primefaces,Omnifaces,我正在尝试使用OmniFaces 1.3(快照)Ajax实用程序的Ajax.updateColumn()方法。更具体地说,我想使用ajax.updateColumn(表1)替换use p:ajax update=“:pageContentPanel”,这是一个h:panelGroup(或p:outputPanel),其中包含以下xhtml 在bean中,我有以下内容,由p:ajax listener=“…”引用: public void TripDateSelectedAndDusingTe

我正在尝试使用OmniFaces 1.3(快照)Ajax实用程序的Ajax.updateColumn()方法。更具体地说,我想使用ajax.updateColumn(表1)替换use p:ajax update=“:pageContentPanel”,这是一个h:panelGroup(或p:outputPanel),其中包含以下xhtml


在bean中,我有以下内容,由p:ajax listener=“…”引用:

public void TripDateSelectedAndDusingTemplate(DateSelectEvent事件){
DateTime dt,today=DateTime.now(),
tripDateTime=新的日期时间(event.getDate());
字符串clientId=event.getComponent().getClientId();
整数pos=clientId.indexOf(“:tripDate”)-1,
rowNumber=Integer.valueOf(clientId.substring(clientId.lastIndexOf(“:”,pos)+1,pos+1));
/*
*clientId=orderAddUsingTemplateForm:dt\u tripDates:0:tripDate
*id=三日期
*/
/*
*如果列表中的tripDate位于参数tripDate之后,
*有今天的日期,然后让他们开始辩论
*/
for(int i=行数;i
在尝试使用Ajax.updateColumn()时,我添加了“HtmlDataTable TripDatesDataable”作为bean的属性


该bean是JSF@SessionScoped托管bean。请告诉我如何在执行p:Ajax(属于上面xhtml中的p:calendar)时调用Ajax.updateColumn()。谢谢。

关键是您必须以某种方式拥有组件的句柄,以便将其传递给
Ajax\updateColumn()
。在您的特定情况下,最简单的方法是在的帮助下通过
event.getComponent()
获取它

注意,您也可以通过这种方式获取行号,而无需细分客户机ID

int rowNumber = tripDatesDataTable.getRowIndex();

很好用!另一个伟大的BalusC答案/响应和解决方案!非常感谢。
public void tripDateSelectedOnAddUsingTemplate(DateSelectEvent event) {
    DateTime dt, today = DateTime.now(),
             tripDateTime = new DateTime(event.getDate());
    String clientId = event.getComponent().getClientId();
    Integer pos = clientId.indexOf(":tripDate") - 1,
            rowNumber = Integer.valueOf(clientId.substring(clientId.lastIndexOf(":", pos) + 1, pos + 1));
    /*
     * clientId = orderAddUsingTemplateForm:dt_tripDates:0:tripDate
     * id = tripDate
     */
    /*
     * if tripDates in the list, that follow the argument tripDate in the list,
     * have today's Date, then set them to the argument
     */
    for (int i = rowNumber; i < nbrOfTripDates; i++) {
        tripDates.get(i).setTripDate(tripDateTime.toDate());
    }
    // OmniFaces Ajax utility to update UIData columns
    Ajax.updateColumn(tripDatesDataTable, 1);
}
UIData tripDatesDataTable = Components.getClosestParent(event.getComponent(), UIData.class);
// ...
Ajax.updateColumn(tripDatesDataTable, 1);
int rowNumber = tripDatesDataTable.getRowIndex();