将HTTP GET参数传递给JSF bean方法

时间:2014-03-09 11:26:14

标签: jsf jsf-2 primefaces

我想将GET参数从URL传递给方法,通过单击按钮调用该方法。 例如,我有网址: /someurl/semepage.xhtml?id=1 。我的页面上有一个按钮:

<p:commandButton value="say it" action="#{test.sayIt(param['id'])}"/>

豆看起来像:

@ManagedBean
@ViewScoped
public class Test{
    public void sayIt(String value){
        System.out.println(value);
    }
}

但是当我点击按钮时,它只是没有反应。为什么会这样? 方法甚至没有被调用。

如果我像这里一样传递参数:

<p:commandButton value="say it" action="#{test.sayIt('someword')}"/> 

一切都很好。

3 个答案:

答案 0 :(得分:5)

@Daniel的回答没问题,但是这里使用<f:viewParam />和EL参数传递,为你的情况提供了一个更简单的JSF 2-ish替代方案。请注意,在这种情况下不需要<f:ajax />,因为<p:commandButton />默认情况下具有ajax行为。

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core"
    xmlns:p="http://primefaces.org/ui">
<h:head />
<h:body>
    <f:metadata>
        <f:viewParam name="id" />
    </f:metadata>
    <h:form>
        <p:commandButton value="say it" action="#{bean.sayIt(id)}" />
    </h:form>
</h:body>
</html>
@ManagedBean
@ViewScoped
public class Bean implements Serializable {

    public void sayIt(String value) {
        System.out.println(value);
    }

}

使用JSF 2.2.5和Primefaces进行测试4.请记住在使用JSF 2.1.x的情况下更改标记名称空间。

答案 1 :(得分:3)

这是一种方法 - 使用<f:param,如下所示:

<h:commandButton value="Test The Magic Word" action="#{test.sayIt}">
    <f:param name="id" value="#{param['id']}"></f:param>
    <f:ajax execute="something" render="something_else"></f:ajax>
</h:commandButton>

在你的豆子里

HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext()
        .getRequest();

String id = request.getParameter("id");

答案 2 :(得分:1)

只是为了好玩,你试过request.getParameter('id')吗?