我是Spring / JSF的新手。
我有一个由@Component
注释的控制器,其@Autowired
类UserClass
具有,
@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但无法理解。
答案 0 :(得分:1)
像Primefaces这样的组件库严重依赖于有状态模型,这意味着至少在托管bean中使用视图范围。如果您使用请求范围,您将为每个请求重新创建托管bean,包括ajax请求,我想这不是您想要的(不是JSF的方式,在最小)。
您最好使用自定义Spring Scope来模拟JSF视图范围。我喜欢来自PF团队的this approach(有点旧的帖子,但你仍然可以针对较新的Spring版本进行调整)或this one,这是更精细的。