2010-06-09 18 views
7

Ich möchte eine Schaltfläche erstellen, die zu einer anderen URL navigiert und einige Anforderungsparameter in der URL weitergibt. Der outputLink funktioniert, aber ich möchte einen Button, der commandButton sieht gut aus, aber ich kann Parameter übergeben.JSF commandButton URL-Parameter

Gibt es eine Lösung?

Antwort

16

Die h:commandButton folgt nicht eine GET Anfrage Feuer, aber eine POST Anfrage, so dass Sie es nicht verwenden können. Wenn Sie bereits auf JSF sind 2.0 und die Zielseite ist in diesem Zusammenhang, dann können Sie die h:button für diesen Einsatz:

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

(keine h:form erforderlich ist hier wie in h:outputLink). Dies erzeugt einen Knopf, der zu otherViewId.jsf?param1=value1&param2=value2 geht.

Aber wenn Sie noch nicht auf JSF 2.0 sind, dann ist Ihr bestes, einfach CSS zu greifen, um den Link wie eine Schaltfläche zu gestalten.

<h:outputLink styleClass="button"> 

mit so etwas wie

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

Mit der Schaltfläche können Sie eine action assoziieren, die ein Verfahren, in dem Backing Bean ist Sie können params in der Backing Bean gesetzt und sie lesen, wenn Sie die Taste drücken, aus dem Verfahren zu action verknüpft. Die Aktionsmethode sollte eine String zurückgeben, die vom Navigation Handler gelesen wird, um zu überprüfen, ob er auf eine neue Seite wechseln muss, gemäß der Konfiguration in .

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

} 

Dieses Beispiel aus here genommen wird (BalusC Blog, wahrscheinlich wird er kommen und Ihnen sagen, dass Link zu überprüfen, aber ich bin schneller: P)

Um dies zu erreichen, muss die Bean als session scoped eingestellt werden. Wenn Sie es wünschen request scoped können Sie die Schritte here

Verwandte Themen