2010-06-09 121 views
7

Me gustaría hacer un botón que navegue a una URL diferente y pasar algunos parámetros de solicitud a través de la URL. El outputLink funciona pero me gustaría un botón, el commandButton se ve bien pero puedo pasar parámetros.JSF commandButton Parámetros de URL

¿Hay una solución?

Respuesta

16

El h:commandButton no se dispara una solicitud GET, sino una solicitud POST, por lo que no se puede utilizar. Si ya estás en JSF 2.0 y la página de destino está en el mismo contexto, a continuación, puede utilizar la h:button para esto:

<h:button value="press here" outcome="otherViewId"> 
    <f:param name="param1" value="value1" /> 
    <f:param name="param2" value="value2" /> 
</h:button> 

(sin h:form se requiere aquí como en h:outputLink). Esto creará un botón que va al otherViewId.jsf?param1=value1&param2=value2.

Pero si aún no está en JSF 2.0, lo mejor es simplemente obtener CSS para darle un estilo al enlace como un botón.

<h:outputLink styleClass="button"> 

con algo como

a.button { 
    display: inline-block; 
    background: lightgray; 
    border: 2px outset lightgray; 
    cursor: default; 
} 
a.button:active { 
    border-style: inset; 
} 
5

Con el botón se asocia una action, que es un método en el bean de respaldo Puede configurar parametros en el bean de respaldo y leerlos cuando se pulsa el botón, a partir del método vinculado a action. El método de acción debe devolver un String, que será leído por el controlador de navegación para verificar si debe moverse a una nueva página, de acuerdo con la configuración en el faces-config.xml.

<h:form> 
    <h:commandButton value="Press here" action="#{myBean.action}"> 
     <f:setPropertyActionListener target="#{myBean.propertyName1}" value="propertyValue1" /> 
     <f:setPropertyActionListener target="#{myBean.propertyName2}" value="propertyValue2" /> 
    </h:commandButton> 
</h:form> 

bean de respaldo:

package mypackage; 


public class MyBean { 

    // Init -------------------------------------------------------------------------------------- 

    private String propertyName1; 
    private String propertyName2; 

    // Actions ----------------------------------------------------------------------------------- 

    public void action() { 
     System.out.println("propertyName1: " + propertyName1); 
     System.out.println("propertyName2: " + propertyName2); 
    } 

    // Setters ----------------------------------------------------------------------------------- 

    public void setPropertyName1(String propertyName1) { 
     this.propertyName1 = propertyName1; 
    } 

    public void setPropertyName2(String propertyName2) { 
     this.propertyName2 = propertyName2; 
    } 

} 

Este ejemplo está tomado de here (blog BalusC, probablemente vendrá y le dirá para comprobar que enlazan pero yo soy más rápido: P)

Por supuesto, para lograr esto, el bean tiene que establecerse como session scoped. Si usted quiere que sea request scoped puede seguir los pasos here

Cuestiones relacionadas