3 Stimmen

Warum wird NavigationHandler.handleNavigation() nicht an die View-ID weitergeleitet?

Innerhalb einer Phase Listener-Klasse, die während der Phase "RESTORE_VIEW" ausgeführt wird, habe ich etwas Code wie diesen:

public void afterPhase(PhaseEvent event) {
  FacesContext fc = event.getFacesContext();
  NavigationHandler nh = fc.getApplication().getNavigationHandler();
  nh.handleNavigation(fc, null, "/a/specific/path/to/a/resource.jspx");
}

Die Navigation zur neuen URL funktioniert hier nicht. Die gestellte Anfrage erhält lediglich eine Antwort von der ursprünglichen JSPX, zu der navigiert wurde.

Code wie dieser funktioniert gut:

public void afterPhase(PhaseEvent event) {
  FacesContext fc = event.getFacesContext();
  NavigationHandler nh = fc.getApplication().getNavigationHandler();
  nh.handleNavigation(fc, null, "OUTCOME_DEFINED_IN_FACES_CONFIG_XML");
}

Außerdem funktioniert das erste Snippet mit einem IceFaces Faces Provider, aber nicht mit Sun JSF 1.2, das ich verwenden muss. Gibt es etwas, das ich tun kann, um den Code zu reparieren, so dass es möglich ist, zu bestimmten URLs weiterzuleiten?

3voto

BalusC Punkte 1034465

Verwenden Sie ExternalContext#dispatch() stattdessen.

Oder, wenn es eine Weiterleitung sein soll, verwenden Sie ExternalContext#redirect() .

Dass es in IceFaces funktioniert, muss ein Fehler oder ein impl-spezifisches "Feature" sein. Dies ist nämlich nicht das, was die NavigationHandler API-Vertragsdefinitionen.

1voto

Erik Hermansen Punkte 1918

Ich schien eine Antwort zu finden. Der Code unten funktioniert gut für mich:

public void afterPhase(PhaseEvent event) {
  FacesContext fc = event.getFacesContext();
  NavigationHandler nh = fc.getApplication().getNavigationHandler();
  fc.getViewRoot().setViewId("/a/specific/path/to/a/resource.jspx");
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X