2012-02-18 98 views
2

我正在使用多个PrimeFaces <p:remoteCommand/> s来调用页面上的各种动作侦听器。在javascript调用中,我传递了参数。这些参数到达请求参数映射中。如何在托管bean中设置或注入请求参数?

现在,我可以从动作侦听器本身的地图中提取参数。但是,我希望行动听众不必这样做。相反,他们应该检查bean中适当的值是否为空,并据此采取行动。

我想要将它集中在单个事件中,或者更好的是让请求参数值以某种方式自动注入到bean中。

所以我的问题是:

  1. 有没有办法,我能处理到处理该请求的参数调用任何动作侦听器之前的事件类型?
  2. 更好的是,有没有办法自动将请求参数注入到bean属性中?

回答

3

如果托管bean是请求范围的,那么您可以使用@ManagedProperty。请求参数映射已经在#{param}可用的EL上下文中。

@ManagedProperty("#{param.foo}") 
private String foo; 

如果管理bean是在更广的范围,那么你就不能使用@ManagedProperty这一点。但是,如果您使用CDI或可以使用它,则可以使用homegrow作为注释。

@Inject @HttpParam 
private String foo; 

为JSF的替代管理豆在更广的范围是<f:viewParam>标签。我只能从经验中不能分辨出它是否可以与<p:remoteCommand>结合使用,但从理论上讲它应该工作得很好。另见ViewParam vs @ManagedProperty(value = "#{param.id}")

+0

该bean是视图的作用域。对不起,我假设它被我使用''这个事实所暗示,它提供了一种从javascript调用动作侦听器然后更新部分页面的方法。这种情况通常不会与请求范围的bean一起使用。我已经开始使用每页相位听众,但目前有点尴尬。 – 2012-02-18 03:29:16

+0

你最好的选择就是''。 – BalusC 2012-02-18 03:30:57

+0

我开始阅读ViewParam vs @ManagedProperty。首先,我不知道''可以用于编码到URL中的参数以外的任何内容。其次,根据那篇文章,视图参数在更新模型值阶段中设置,这是应用请求值之后的两个阶段,我假设它是调用动作侦听器的地方。我可能会离开......我会开始仔细阅读。谢谢。 – 2012-02-18 03:35:17