CommandButton open new tab with FlashScope parameters

后端 未结 1 1714
慢半拍i
慢半拍i 2021-01-13 23:47

How can I open new tab when user clicks p:commandButton? I also want to pass some parameters to new page using FlashScope. Here\'s the code:

<         


        
相关标签:
1条回答
  • 2021-01-14 00:18

    Use target="_blank" on the form to tell the browser that the synchronous response of the form should be presented in a new (blank) tab/window. You only need to turn off ajax behaviour of the <p:commandButton> in order to make it a synchronous request.

    <h:form target="_blank">
      <p:commandButton value="open new tab" action="#{myBean.newTab}" ajax="false" />
    </h:form>
    

    No changes are necessary in the backing beans, it'll just work as you intented. I would only recommend to use POST-Redirect-GET pattern in the action method.

    return "otherView?faces-redirect=true";
    

    Otherwise the new tab would show the URL of the originating page and a F5 would re-invoke the POST. Also, this way the flash scope is also really used as it is been designed for (if you didn't redirect, just storing in request scope was been sufficient).


    Update: as per the comments, the view scoped bean in the initial tab/window get killed this way. by returning a String navigation case outcome. That's right, if you'd like to keep the view scoped bean alive, replace the navigation case by a Faces#redirect() call (assuming that it's indeed OmniFaces which you're using there for Faces#setFlashAttribute()). You only need to set Flash#setRedirect() to true beforehand to instruct the flash scope that a redirect will occur.

    public void newTab() throws IOException {
        Faces.setFlashAttribute("foo", bar); 
        Faces.getFlash().setRedirect(true);
        Faces.redirect("otherView.xhtml");
    }
    
    0 讨论(0)
提交回复
热议问题