2010-06-09 14 views
7

Vorrei creare un pulsante che consenta di passare a un URL diverso e passare alcuni parametri di richiesta nell'URL. L'outputLink funziona ma vorrei un pulsante, il comandoButton sembra buono ma posso passare i parametri.JSF commandButton Parametri URL

C'è una soluzione?

risposta

16

Il h:commandButton non sparare una richiesta GET, ma una richiesta POST, quindi non è possibile utilizzarlo. Se siete già in JSF 2.0 e la pagina di destinazione è nello stesso contesto, quindi è possibile utilizzare il h:button per questo:

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

(senza h:form è qui necessaria come in h:outputLink). Questo creerà un pulsante che va a otherViewId.jsf?param1=value1&param2=value2.

Ma se non si è ancora su JSF 2.0, il meglio è semplicemente prendere il CSS per modellare il collegamento come un pulsante.

<h:outputLink styleClass="button"> 

con qualcosa di simile

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

Con il pulsante si associa un action, che è un metodo nel sottofondo di fagioli È possibile impostare params nel backing bean e leggerli quando si preme il pulsante, dal metodo legato alla action. Il metodo di azione deve restituire un String, che verrà letto dal gestore di navigazione per verificare se deve spostarsi su una nuova pagina, in base alla configurazione nello 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> 

backing bean:

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; 
    } 

} 

Questo esempio è tratto da here (blog BalusC, probabilmente lui verrà e ti dicono di controllare che link, ma io sono più veloce: P)

Ovviamente per ottenere questo il bean deve essere impostato come session scoped. Se si vuole che sia request scoped è possibile seguire i passaggi here