2010-06-09 4 views
7

Farklı bir URL'ye giden ve bazı istek parametrelerini URL'de ileten bir düğme yapmak istiyorum. OutputLink çalışır ama ben bir düğme istiyorum, commandButton iyi görünüyor ama parametreleri geçirebilirim.JSF komutuButton URL parametreleri

Çözüm var mı? yedekleme fasulye Sen yedekleme fasulye params ayarlanır ve action bağlı yönteminden, düğmesine bastığınızda bunları okuyabilir bir yöntemdir, bir action ilişkilendirmek düğme ile

cevap

16

h:commandButton bir GET isteği yangın yok, ama bir POST isteğini yerine getirebilir. Eğer JSF 2.0 zaten konum ve hedef sayfa aynı bağlamda ise, o zaman bunun için h:button kullanabilirsiniz:

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

(hayır h:form h:outputLink olduğu gibi burada gereklidir). Bu, otherViewId.jsf?param1=value1&param2=value2'a giden bir düğme oluşturacaktır.

Ancak, henüz JSF 2.0'da değilseniz, en iyisi, bağlantıyı bir düğme gibi biçimlendirmek için CSS'yi almaktır.

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

<h:outputLink styleClass="button"> 

5

. Eylem yöntemi, faces-config.xml'daki yapılandırmaya göre yeni bir sayfaya taşınması gerekip gerekmediğini kontrol etmek için Gezinme İşleyici tarafından okunacak olan String değerini döndürmelidir.

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

yedekleme fasulye:

Bu örnek here alınır
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; 
    } 

} 

(BalusC blog, muhtemelen o gelip bu bağlantıyı kontrol etmek söyleyecektir ama daha hızlıyım edecek!: P)

Tabii ki bunu elde etmek için fasulye session scoped olarak ayarlanmalıdır. Ne olmasını istiyorsanız bunu kullanamaz böylece request scoped Eğer adımları here