【问题标题】:Pass HTTP GET parameter to a JSF bean method将 HTTP GET 参数传递给 JSF bean 方法
【发布时间】:2014-03-09 11:26:14
【问题描述】:

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

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

bean 看起来像:

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

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

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

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

一切正常。

【问题讨论】:

    标签: jsf jsf-2 primefaces


    【解决方案1】:

    这是一种方法 - 使用 &lt;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");
    

    【讨论】:

    • 这行得通!但是在我单击按钮后,“?id = 1”会从浏览器中的 URL 中删除。但无论如何,谢谢!
    • 如果您不想重新加载整页 -> 添加
    【解决方案2】:

    @Daniel 的响应是可以的,但在这里它是一个更简单的 JSF 2-ish 替代方案,使用&lt;f:viewParam /&gt; 和 EL 参数传递。请注意,在这种情况下不需要 &lt;f:ajax /&gt;,因为 &lt;p:commandButton /&gt; 默认具有 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 时更改标签命名空间。

    【讨论】:

    • 感谢您的回答,但由于某种原因,这种方式对我不起作用,我已经提到它here。我正在使用 GlassFish Server Open Source Edition 4.0Mojarra 2.2.0; PrimeFaces 4.0Java 1.7.0_40.
    • 我已经在 tomcat 服务器和它的工作上试过了!所以 glassfish 的问题,但我不能在我的项目中使用 tomcat。
    • 找到了 ;-) 并在您的链接问题中作为答案发布。希望你让它工作......
    • 更简单:#{bean.sayIt(param.id)}
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 2015-02-02
      • 1970-01-01
      相关资源
      最近更新 更多