Wie zu erkennen, aktualisieren von PrimeFaces dataTable
Ich habe eine ganz einfache und direkte Frage.
Gibt es irgendeine Methode, wie zu erkennen, änderung in der dataTable?
Sagen wir mal, ich habe eine dataTable mit pagination. Und jetzt, wenn ich von Seite 1 auf Seite 2, die ich brauche, um dies zu erkennen-event und update gMap Komponente auf der gleichen Seite (ich muss die gMap zur Aktualisierung seiner dataModel aus backing-bean). Ich habe versucht, die Verwendung von update-parameter, aber als PF-Dokumentation erwähnt, es ist veraltet und hat nicht funktioniert.
Ich bin in der Lage, zu aktualisieren gMap manuell durch klicken auf p:button, aber ich muss es tun automatisch nach der dataTable ändern.
Vielleicht gibt es eine Lösung mit javascript und verbindlich datatable-widget, um etwas action, aber ich weiß wirklich nicht 🙁
Vielen Dank im Voraus für jede Hilfe
UPDATE
Meine Methode für die Initialisierung LazyDataMethod ist:
private LazyDataModel<Poi> lazyModel;
private void initializeLazyModel() {
lazyModel = new LazyDataModel<Poi>() {
@Override
public List<Poi> load(int first, int pageSize, String sortField, boolean sortOrder, Map<String, String> filters) {
List<Poi> data = service.getPoisLazily(first, pageSize, sortField, sortOrder, filters);
pois = data;
createMapForPOIs(pois);
return data;
}
};
lazyModel.setRowCount(getNumberOfRows());
}
Nächsten sind es nur getter/setter für LazyDataModel:
public LazyDataModel<Poi> getLazyModel() {
return lazyModel;
}
public void setLazyModel(LazyDataModel<Poi> lazyModel) {
this.lazyModel = lazyModel;
}
In pois.xhtml habe ich datatable-Erklärung wie folgt:
<p:dataTable update="formMap:map" id="tablePois" var="poi" value="#{poiController.lazyModel}" lazy="true"
paginator="true" rows="10" paginatorPosition="bottom"
selection="#{poiController.poi}" rowSelectListener="#{poiController.showPoi}" selectionMode="single"
paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
rowsPerPageTemplate="5,10,15,30,50">
<p:column>
<h:outputText value="#{poi.name}" />
</p:column>
</p:dataTable>
Also an dieser Stelle würde ich gerne
RequestContext context = RequestContext.getCurrentInstance();
context.addPartialUpdateTarget("form:gMapId");
vorgeschlagen von @spauny. Aber weiß nicht, wo in der backing-bean, um es zu stellen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hoffen, dass Sie verwenden, Primefaces 3.0.M4...
Kann es zwei Lösungen: die erste besteht nur darin, Primefaces, und um genauer zu sein, die
RequestContext
Komponente. Weil die macht von Primefaces, die Sie bekommen können(server-Seite) einen RequestContext-Instanz und verwenden Sie eine Methode namensaddPartialUpdateTarget
. Nach den Anfragen der Benutzer eine andere Seite, die Methode der Rückkehr die Liste erneut aufgerufen wird; das ist die beste Zeit für Sie zu aktualisierengMap(server-side)
:Finden Sie Infos hier: http://www.primefaces.org/showcase-labs/ui/requestContext.jsf und natürlich können Sie Lesen Sie die Primefaces-Benutzerhandbuch für 3.0.M4.
Und es gibt auch eine andere Lösung, die natürlich weit schlechter als der erste(in diesem Zusammenhang), aber die helfen könnten Sie in anderen Situationen: die
dataTable pagination
es ist faul(das bedeutet, dass ein ajax-request gemacht wird, jedes mal, wenn der Benutzer-Anfragen für die andere Seite der Ergebnisse), so können Sie abfangen der ajax-Anfrage durch die VerwendungajaxStatus
Komponente ( http://www.primefaces.org/showcase-labs/ui/ajaxStatusHome.jsf - finden Sie sowohl deklarative und programmatische ) undonstart
können Sie rufen eine javascript-Funktion könnte die ajax-Funktionen) - natürlich ist dasdownsides
sind, dass Sie zum implementieren dieser Funktion aber das Schlimmste ist, dass Sie implementieren können, nur eine ajax-status-pro Seite(das bedeutet, dass jeder ajax-Anfrage aufrufen, javascript Funktion mit ajax-Funktionen).Damit Sie eine bessere Nutzung RequestContext, aber ajaxStatus es ist eine sehr schöne und wichtige Komponente: Sie können zeigen, ein lade-gif für jede ajax-Anfrage, oder rufen eine javascript-Funktion, die zeigt, dass der Benutzer einige schöne/interessante Dinge(in der Seite).
addPartialUpdateTarget
(obwohl, ich bin mir ziemlich sicher, dass es ist)...Post-code(update Frage), um zu sehen, wenn Sie etwas falsch machen.getLazyModel
(vor der Rückkehr natürlich)... Haben Sie Ihr problem gelöst?