簡體   English   中英

JSF commandButton URL參數

[英]JSF commandButton URL parameters

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

有解決方案嗎?

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

使用按鈕關聯一個action ,這是一個支持bean中的方法您可以在支持bean中設置params,並在按下按鈕時從鏈接到action的方法中讀取它們。 action方法應該返回一個String ,導航處理程序將根據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>

支持豆:

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博客,可能他會來告訴你檢查那個鏈接,但我更快!:P)

當然,為了實現這一點,必須將bean設置為session scoped 如果您希望它是request scoped您可以按照此處的步驟操作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM