Frage Kann ich eine JSF-Komponente von einer JSF-Backing-Bean-Methode aktualisieren?


Gibt es eine Möglichkeit, dass eine JSF-Backing-Bean eine Aktualisierung einer Komponente auf der Seite verursacht? Ich bin nicht auf der Suche nach einer Ajax-Komponente mit Update-Attribut, um eine Komponente auf der Seite zu aktualisieren. Ich muss ein Update innerhalb einer JSF-Backing-Bean-Methode auslösen. Beachten Sie, dass das Update auf der Seite nach Abschluss dieser Methode oder vor ihrer Fertigstellung erfolgen kann. Ich verwende PrimeFaces, wenn es eine Lösung gibt, die man mit PrimeFaces machen kann.


76
2017-07-06 15:22


Ursprung


Antworten:


Verwenden Sie die Standard-JSF-API und fügen Sie die Client-ID hinzu PartialViewContext#getRenderIds().

FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add("foo:bar");

Verwenden Sie die PrimeFaces-spezifische API RequestContext#update().

RequestContext.getCurrentInstance().update("foo:bar");

Wenn Sie die JSF-Dienstprogrammbibliothek verwenden OmniFaces, benutzen Ajax#update().

Ajax.update("foo:bar");

Beachten Sie, dass diese Client-IDs absolute Client-IDs darstellen sollten nicht mit dem vorangestellt NamingContainer Trennzeichen wie bei der Ansichtsseite.


140
2017-07-06 17:51



Ich habe auch versucht, eine Komponente aus einer JSF-Backing-Bean / -Klasse zu aktualisieren

Nach der Manipulation der UI-Komponente müssen Sie Folgendes tun:

FacesContext.getCurrentInstance().getPartialViewContext().getRenderIds().add(componentToBeRerendered.getClientId())

Es ist wichtig, die clientId anstelle der (serverseitigen) componentId zu verwenden !!


6
2017-07-02 10:48



Das RequestContext ist veraltet von Grundlagen 6.2. Verwenden Sie von dieser Version Folgendes:

if (componentID != null && PrimeFaces.current().isAjaxRequest()) {
    PrimeFaces.current().ajax().update(componentID);
}

Und ausführen Javascript aus der Backbean benutzen Sie diesen Weg:

PrimeFaces.current().executeScript(jsCommand);

Referenz:


1
2018-06-07 19:28