2

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

如果请求是 GET 请求,可以通过 f:viewParam 获取请求参数的值。

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

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

1 回答 1

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

您需要以不同的方式解决具体的功能需求。由于您没有在问题中说明具体的功能要求,因此无法对此给出详细的答案。这里至少有一些提示:

  1. @Inject目标 bean 并在操作方法期间将其设置为属性。
  2. 使用<f:setPropertyActionListener>.
  3. 使用闪光范围。
  4. 在查询字符串中发送带有参数的重定向。
于 2012-12-06T16:21:47.780 回答