11 votes

Envoi d'une redirection à partir d'une méthode d'écoute ajax

Cette question est étroitement liée à este une (à laquelle il a été répondu).

Dans mon projet, je navigue entre les écrans à l'aide de boutons de commande JSF, où l'attribut action pointe vers une fonction qui renvoie une chaîne. T

<h:commandButton value="Select" action="#{searchResultsBundledBean.selectFlight}">
</h:commandButton>

selectFlight retournerait une chaîne de caractères, par exemple selected-flight-review qui dirigerait l'utilisateur vers selected-flight-review.xhtml

Pour des raisons de mobilité, j'ai dû faire un panelGrid cliquable à l'aide d'un appel ajax, par ex.

<h:panelGrid>
    <f:ajax event="click" listener="#{searchResultsBundledBean.clickFlight(lowFareBundledSearchItem)}"/>
 </h:panelGrid

Cela fonctionne, je l'ai testé, et le résultat correct est renvoyé (testé avec l'enregistrement juste avant qu'il ne soit renvoyé).

Cependant, aucune redirection n'a lieu. L'appel ajax ne le fait pas encore. Comment faire pour que la redirection se fasse vers un autre écran ? Je n'ai pas besoin d'envoyer de variables, j'ai juste besoin que le nouvel écran soit affiché. Dois-je utiliser autre chose qu'ajax (je préférerais ne pas le faire), ou existe-t-il un moyen de faire fonctionner le système tel qu'il est actuellement ?

24voto

Johan Nordli Points 594

Vous pouvez rediriger la réponse du bean de soutien :

public void clickFlight(Item lowFareBundledSearchItem) throws IOException {
    // ...
    FacesContext.getCurrentInstance().getExternalContext().redirect("selected-flight-review.xhtml");
    FacesContext.getCurrentInstance().responseComplete();
}

-2voto

Youssef maftah Points 7

Ajoutez simplement votre haricot de soutien return "selected-flight-review" ; Vous n'avez pas besoin d'ajouter (.xhtml) Ou si vous voulez rediriger return "selected-flight-review ? Faces-redirect=true" ;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X