JSF commandButton URL参数

时间:2010-06-09 09:37:46

标签: jsf

我想创建一个导航到不同URL的按钮,并在URL中传递一些请求参数。 outputLink有效,但我想要一个按钮,commandButton看起来不错,但我可以传递参数。

有解决方案吗?

2 个答案:

答案 0 :(得分:17)

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

答案 1 :(得分:5)

使用按钮关联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>

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

步骤操作