Jsf/Spring请求作用域bean
由于我在javaee编程方面没有太多经验,也没有人可以问,所以我想问你。 我的代码中有一件事我不喜欢,并且认为它是以错误的方式实现的。 我的托管bean是请求作用域。在jsf中,我使用rich:pickList,它从列表中获取数据Jsf/Spring请求作用域bean,spring,jsf,scope,managed-bean,Spring,Jsf,Scope,Managed Bean,由于我在javaee编程方面没有太多经验,也没有人可以问,所以我想问你。 我的代码中有一件事我不喜欢,并且认为它是以错误的方式实现的。 我的托管bean是请求作用域。在jsf中,我使用rich:pickList,它从列表中获取数据 @Scope("request") public class MyBean{ private List<String> sourceList; .... public List<String> gets
@Scope("request")
public class MyBean{
private List<String> sourceList;
....
public List<String> getsourceList() {
//if (sourceList == null) <--- Has no sence in request scoped bean
{ sourceList = service.loadList();
}
return sourceList;
}
....
}
@范围(“请求”)
公共类MyBean{
私有列表源列表;
....
公共列表getsourceList(){
//如果(sourceList==null)每个人都有这个问题,因为没有“对话”范围。您有“会话”(只要用户登录)和“请求”(一个请求/响应周期)
你需要的是说“用户已经开始了一个对话”,然后做几个属于对话的请求,最后结束对话
由于JavaEE不支持这一点,您必须对其进行模拟。当用户启动对话时,将bean放入会话范围并保留在会话范围内。当用户完成对话时,手动删除bean或告诉它清理缓存。Spring WebFlow中实际上有一个“对话范围”:
如果您使用的是JSF2.0,您可以通过以下方式使用新的视图范围
@ManagedBean
@视域
公共类Bean{
私人名单;
@EJB
私人餐饮服务;
@施工后
公共void init(){
foos=fooService.list();
}
公共列表getFoos(){
返回foos;
}
}
当您仍然使用JSF 1.x时,最好知道and对具有上述代码设计的请求范围bean具有完全相同的效果(即不在getter中加载数据):
及
我没有使用新的RichFaces的KeepAlive注释,但是关于文档,它的行为也应该相同。在web.xml中添加Spring RequestContextListener,Spring可以添加请求范围和会话范围
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
org.springframework.web.context.request.RequestContextListener
Cf:那么keepAlive特性呢?它会有帮助还是不是一个好的实践?有很多keepAlive特性。你在说哪一个?嗯:-/在Spring文档中找不到该注释。完整的限定名是什么?:)这是整个包。org.ajax4jsf.model.keepAlive我已经阅读了指南,我想这就是我所写的感谢您对对话范围的建议,有趣的想法:)注释的完整限定名是什么?@KeepAlive
?或者您有文档的URL吗?
<a4j:keepAlive beanName="#{bean}" />
<t:saveState beanName="#{bean}" />
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>