如何使用CDI管理的bean获取POST请求参数?

时间:2012-12-06 16:10:50

标签: jsf-2

使用JSF(@Managedbean)管理的requestcoped bean,您可以使用@ManagedProperty(“#{param.id}”)获取请求参数的值。

如果请求是GET请求,您可以使用f:viewParam获取请求参数的值。

当bean受CDI管理(@Named)并且请求是POST请求时,是否有一种特殊的机制来获取请求参数的值?我只知道Java代码

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id");

1 个答案:

答案 0 :(得分:1)

<f:viewParam>在POST请求中效果很好。

您应该记住,这仅在应用请求值阶段期间运行,而不是在渲染响应阶段期间运行。因此,如果您实际上在操作方法上导航并期望将参数设置为目标页面的视图参数,那么您就错了。它只会在POST请求实际提交的视图中设置。

作为<f:viewParam>也适用于POST的证据,这是一个测试片段:

<f:metadata>
    <f:viewParam name="foo" />
</f:metadata>
<h:form>
    <h:commandButton value="submit">
        <f:param name="foo" value="bar" />
    </h:commandButton>
</h:form>
<p>foo: #{foo}</p>

按提交按钮将显示foo: bar

您需要以不同的方式解决您的具体功能需求。 As you didn't tell anything about the concrete functional requirement in your question,不可能对此作出详尽的回答。这里至少有一些提示:

  1. @Inject目标bean并在操作方法期间将其设置为属性。
  2. 使用<f:setPropertyActionListener>
  3. 使用闪存范围。
  4. 在查询字符串中发送带参数的重定向。