2012-12-06 31 views
2

由JSF(@Managedbean)管理的requestcoped bean可以通过@ManagedProperty(“#{param.id}”)获取请求参数的值。如何使用由CDI管理的bean获取POST请求参数?

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

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

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

回答

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. 用查询字符串中的参数发送重定向。
+0

非常感谢,你真了不起。我明白为什么我的代码不工作,试图使用f:viewParam来获取由另一个页面发送的POST请求的参数值。 – user1643352

+0

不客气。 – BalusC

相关问题