Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sending a redirect from inside an ajax listener method

Tags:

redirect

ajax

jsf

This question is closely related to this one (which has been answered).

Throughout my project, I navigate between screens using JSF command buttons, where the action attribute would point to a function that returns a string. The string is the new screen's name e.g.

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

selectFlight would return a string, e.g. selected-flight-review which would direct the user to selected-flight-review.xhtml

For mobile purposes I had to make a panelGrid clickable using an ajax call, e.g.

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

This works, I've tested it, and the correct result is returned(Tested with logging it right before it's returned)

However, no redirection takes place. The ajax call doesn't do it yet. How do I make it redirect to another screen? I don't have to send through any variables, I just need the new screen to be displayed. Should I use something other than ajax(I would prefer not to), or is there some way to make this work the way it is now?

like image 328
Skytiger Avatar asked Sep 03 '13 10:09

Skytiger


People also ask

Can you redirect an Ajax request?

Add a middleware to process response, if it is a redirect for an ajax request, change the response to a normal response with the redirect url. Then in ajaxComplete, if the response contains redirect, it must be a redirect, so change the browser's location.

How do I redirect a page in Ajax?

ajax({ type: 'POST', url: 'b. php', data: 'result='+$name, success: function() { window. location. href = "profile.

How redirect Ajax in php?

If you want to do a full redirect, you can use window. location = 'addcust. php? new_sale='+youridvariable In the success callback.

What is an Ajax listener?

<p:inputText id="counter" value="#{listenerBean.text}" placeholder="Enter Text"> <p:ajax event="keyup" update="out" listener="#{listenerBean.ajaxEvent()}" /> </p:inputText> </h:panelGrid> <h:panelGrid id="out">


1 Answers

You can redirect the response from the backing bean:

public void clickFlight(Item lowFareBundledSearchItem) throws IOException {
    // ...
    FacesContext.getCurrentInstance().getExternalContext().redirect("selected-flight-review.xhtml");
    FacesContext.getCurrentInstance().responseComplete();
}
like image 149
Johan Nordli Avatar answered Sep 28 '22 04:09

Johan Nordli