2010-06-09 73 views
7

我想製作一個按鈕,導航到不同的URL並在URL中傳遞一些請求參數。 outputLink工作,但我想要一個按鈕,commandButton看起來不錯,但我可以傳遞參數。JSF commandButton URL參數

有沒有解決方案?

回答

16

h:commandButton不火GET請求,但一個POST要求,所以你不能使用它。如果你已經對JSF 2.0和目標頁面是在同樣情況下,則可以使用h:button此:

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

(無h:form這裏需要爲h:outputLink)。這將創建一個按鈕,該按鈕將轉到otherViewId.jsf?param1=value1&param2=value2

但是,如果你還沒有使用JSF 2.0,那麼你最好的辦法就是抓住CSS來像鏈接一樣設計鏈接。

<h:outputLink styleClass="button"> 

的東西,如

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

隨着你的action關聯的按鈕,這是在支持Bean 您可以在後端bean設置PARAMS和閱讀它們,當你按下按鈕,從掛action製備方法的方法。根據faces-config.xml中的配置,操作方法應該返回String,導航處理程序將讀取String以檢查它是否必須移動到新頁面。

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

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

} 

這個例子是從 here取(BalusC博客,也許他會告訴你檢查鏈接,但我快:P)

當然要實現這個bean必須設置爲session scoped。如果你希望它是request scoped你可以按照如下步驟here