我正在尝试使用OmniFaces 1.3(SNAPSHOT)Ajax实用程序的Ajax.updateColumn()方法。更具体地说,我想替换使用p:ajax update =“:pageContentPanel”,它是一个h:panelGroup(或p:outputPanel),它包含以下xhtml,使用Ajax.updateColumn(table,1)。
<h:dataTable id="dt_tripDates" style="width: 200px !important;"
var="tripDate" value="#{pf_ordersController.tripDates}">
<p:column style="text-align: right !important;">
<h:outputText id="rowNumber" value="#{tripDate.rowNumber}" />
</p:column>
<p:column style="text-align: center !important;">
<p:calendar id="tripDate" value="#{tripDate.tripDate}"
size="16" label="Trip Date"
pattern="MM/dd/yyyy" navigator="true"
onchange="changeOthersOnDateChange(this);">
<p:ajax partialSubmit="false" event="dateSelect"
listener="#{pf_ordersController.tripDateSelectedOnAddUsingTemplate}"
update=":pageContentPanel"/>
<f:convertDateTime pattern="MM/dd/yyyy" />
</p:calendar>
</p:column>
</h:dataTable>
在bean中,我有以下内容,由p引用:ajax listener =“...”:
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);
}
在尝试使用Ajax.updateColumn()时,我将“HtmlDataTable tripDatesDataTable”添加为bean的属性。
bean是JSF @SessionScoped托管bean。当p:ajax(属于上面的xhtml中的p:calendar)被执行时,请让我知道如何调用Ajax.updateColumn()。感谢。
答案 0 :(得分:1)
关键是你必须以某种方式获得UIData
组件的句柄,以便将其传递给Ajax#updateColumn()
。在您的特定情况下,最简单的方法是在Components#getClosestParent()
的帮助下通过event.getComponent()
获取它。
UIData tripDatesDataTable = Components.getClosestParent(event.getComponent(), UIData.class);
// ...
Ajax.updateColumn(tripDatesDataTable, 1);
请注意,您也可以通过这种方式获取行号,而无需细分客户端ID。
int rowNumber = tripDatesDataTable.getRowIndex();