Question

I need to open a JSF page in a new window by POST on click of a <h:commandButton>. I know I can acheive this using the JavaScript. But I would like to achive this using JSF and not JavaScript.

How can I achieve this? I'm using JSF 2.0.

Was it helpful?

Solution

The only non-JS way is to set target="_blank" in the parent <h:form>.

<h:form target="_blank">
    ...
    <h:commandButton value="Open in new Window" />
</h:form>

This however affects all non-ajax(!) actions which are performed in the very same form. So if you're smart, make the action which shouldn't open in a new window an ajax action. However, ajax is also JavaScript and you mentioned that you don't want to use JS (I hope you don't get shocked once you discover that PrimeFaces is actually full of JavaScript).

If you absolutely need to restrict it to a single action, then you really can't go around asking little help to JavaScript.

<h:form>
    ...
    <h:commandButton value="Open in new Window" onclick="this.form.target='_blank'" />
</h:form>

OTHER TIPS

When you restrict the target only to a single action, maybe you want to get the form in its initial state. With the oncklick action you set the target of the form to a _blan page. After the click, the page is opened in a new tab/page (triggers the action event). At last, the onblur action is triggered and set the form again to its initial state (the rest of the buttons will open in the _self page) With this code, you can restrict to only a h:commandbutton to open in a new page. The rest of the buttons will be opened in the self page:

    <h:commandButton
       onclick="this.form.target='_blank'"
       onblur="this.form.target='_self'"
       id="listadoRebuts"
       action="#{giaquaBusquedaCorte.abrirListadoRebuts}"
       value="#{msg.seqVisorbtnRecibos}">
    </h:commandButton>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top