使用PrimeFaces将bean更改为@Scope(" request")时,Ajax调用无效

时间:2017-06-22 06:01:58

标签: spring jsf primefaces

我是Spring / JSF的新手。

我有一个由@Component注释的控制器,其@AutowiredUserClass具有,

@Scope(value=org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE)

我需要为每个新请求创建一个新的UserClass实例,因此我的控制器使用@Scope("request")进行注释,该注释使用此注释完美地工作(为每个请求创建新实例)。

但它打破了<p:dataTable>选择中的ajax调用,commondLink,<f:setPropertyActionListener...

注意:如果我将@Scope("request")更改为@ViewScoped,则ajax可以正常工作,但我的UserClass会变成单例,并且所有数据都会在线程之间共享。

我用谷歌搜索并知道我们需要使用JSF注释或Spring,但在这里我只使用Spring注释。

我发现了这个,PrimeFaces doesn't work when bean scope is request但无法理解。

1 个答案:

答案 0 :(得分:1)

像Primefaces这样的组件库严重依赖于有状态模型,这意味着至少在托管bean中使用视图范围。如果您使用请求范围,您将为每个请求重新创建托管bean,包括ajax请求,我想这不是您想要的(不是JSF的方式,在最小)。

您最好使用自定义Spring Scope来模拟JSF视图范围。我喜欢来自PF团队的this approach(有点旧的帖子,但你仍然可以针对较新的Spring版本进行调整)或this one,这是更精细的。