2012-07-23 136 views
10

Necesito abrir una página JSF en una nueva ventana mediante POST al hacer clic en <h:commandButton>. Sé que puedo lograr esto usando el JavaScript. Pero me gustaría lograr esto usando JSF y no JavaScript.Abre una nueva ventana mediante POST usando h: commandButton

¿Cómo puedo lograrlo? Estoy usando JSF 2.0.

+0

tiene que ser una ventana? o puede ser una nueva pestaña? – Damian

+0

Nueva pestaña también está bien. Cuando hace clic en el botón de comando, quiero que se abra una página en una nueva pestaña. – vr3w3c9

+0

en un commandLink, logras esto añadiendo target = "_ blank", pero creo que no hay forma de hacerlo en un CommandButton sin javascript – Damian

Respuesta

28

La única forma que no es JS es establecer target="_blank" en el elemento primario <h:form>.

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

Sin embargo, esto afecta a todos los no ajax acciones (!) Que se realizan en la misma forma. Entonces, si eres inteligente, haz que la acción que no debe abrirse en una nueva ventana sea una acción ajax. Sin embargo, ajax también es JavaScript y usted mencionó que no desea usar JS (espero que no se sorprenda una vez que descubra que PrimeFaces en realidad está lleno de JavaScript).

Si absolutamente necesita restringirlo a una sola acción, entonces realmente no puede ir pidiendo poca ayuda a JavaScript.

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

Muchas gracias BalusC. Funcionó :) – vr3w3c9

+0

De nada. – BalusC

3

Cuando restrinja el objetivo solo a una acción, quizás desee obtener el formulario en su estado inicial. Con la acción oncklick, establece el destino del formulario en una página _blan. Después del clic, la página se abre en una nueva pestaña/página (desencadena el evento de acción). Por fin, la acción onblur se desencadena y establece el formulario nuevamente en su estado inicial (el resto de los botones se abrirán en la página _self) Con este código, puede restringir a solo ah: comandobotón para abrir en una página nueva . El resto de los botones se abrirán en la página propia:

<h:commandButton 
     onclick="this.form.target='_blank'" 
     onblur="this.form.target='_self'" 
     id="listadoRebuts" 
     action="#{giaquaBusquedaCorte.abrirListadoRebuts}" 
     value="#{msg.seqVisorbtnRecibos}"> 
    </h:commandButton> 
+0

A partir de la pregunta: * "Sé que puedo lograr esto usando el javascript. Pero me gustaría lograr esto usando código JSF y no Javascript". * – BalusC

Cuestiones relacionadas