Pytanie Czy mogę zaktualizować komponent JSF z metody bean zaplecza JSF?


Czy istnieje sposób, aby komponent bean JSF powodował aktualizację komponentu na stronie? Nie chcę używać składnika ajax z atrybutem aktualizacji, aby zaktualizować komponent na stronie. Potrzebuję wywołać aktualizację z poziomu metody bean zaplecza JSF. Uwaga: aktualizacja na stronie może się zdarzyć po zakończeniu tej metody lub przed jej ukończeniem. Korzystam z PrimeFaces, jeśli istnieje rozwiązanie, które można zastosować przy korzystaniu z PrimeFaces.


76
2017-07-06 15:22


pochodzenie


Może wywołać błąd sprawdzania poprawności: stackoverflow.com/a/14401741/1599699 - Andrew


Odpowiedzi:


Korzystając ze standardowego interfejsu API JSF, dodaj identyfikator klienta do PartialViewContext#getRenderIds().

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

Używając specyficznego API PrimeFaces, użyj RequestContext#update().

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

Jeśli zdarzy ci się użyć biblioteki narzędziowej JSF OmniFaces, posługiwać się Ajax#update().

Ajax.update("foo:bar");

Niezależnie od sposobu zwróć uwagę, że te identyfikatory klienta powinny reprezentować bezwzględne identyfikatory klienta nie poprzedzony prefiksem NamingContainer znak separatora, tak jak w przypadku widoku od strony.


140
2017-07-06 17:51



Wydaje się, że nie mogę tego uruchomić podczas fazy Render Response (która niestety jest tam, gdzie jestem zmuszony umieścić ten kod). Jeśli umieszczę w Invoke Application lub we wcześniejszych fazach, wszystko działa poprawnie. Jakiekolwiek obejścia w fazie reakcji na renderowanie? - BestPractices
Nie, jest już za późno. Przenieś zadanie, aby wywołać fazę działania lub fazę odpowiedzi renderowania. Wywołaj metodę według <f:ajax listener> lub <f:event type="preRenderView" listener> - BalusC
Masz pomysł, jak to zrobić z JSF 1.2? Mogę zadać nowe pytanie, jeśli odpowiedź jest zbyt długa / złożona. - RinaldoPJr
@RinaldoPJr: JSF 1.2 nie ma pojęcia <f:ajax>. Jest to wprowadzone od czasu JSF 2.0. Będziesz musiał odwołać się do biblioteki komponentów JSF 1.2. - BalusC
@DanielK: Nie mam pojęcia. Nie robię Trynidadu. Po prostu użyj standardowego interfejsu API JSF, jeśli nadal nie możesz zrozumieć sposobu działania w Trynidadzie. - BalusC


Próbowałem również zaktualizować komponent z komponentu bean / klasy jsf

Po manipulowaniu składnikiem interfejsu użytkownika należy wykonać następujące czynności:

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

Ważne jest użycie clientId zamiast (component-id) po stronie serwera!


6
2017-07-02 10:48





The RequestContext jest przestarzałe od Primefaces 6.2. Z tej wersji skorzystaj z:

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

I wykonać javascript z backbean użyj w ten sposób:

PrimeFaces.current().executeScript(jsCommand);

Odniesienie:


1
2018-06-07 19:28