如何在托管bean中设置或注入请求参数?

时间:2012-02-18 00:45:16

标签: java jsf-2 primefaces

我正在使用多个PrimeFaces <p:remoteCommand/>来调用页面上的各种动作侦听器。在javascript调用中,我正在传递参数。这些参数到达请求参数映射。

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

我想要将它集中在一个事件中,或者更好的是,将请求参数值自动注入到bean中。

所以我的问题是:

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

1 个答案:

答案 0 :(得分:3)

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

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

如果托管bean的范围更广,那么您不能使用@ManagedProperty。但是,如果您正在使用CDI或可以使用它,那么您可以homegrow为此注释。

@Inject @HttpParam
private String foo;

更广泛范围内的JSF托管bean的替代方法是<f:viewParam>标记。我只能从经验中判断出它是否可以与<p:remoteCommand>结合使用,但从理论上说它应该同样有效。另请参阅ViewParam vs @ManagedProperty(value = "#{param.id}")