我正在做一个Web应用程序使用Spring 3.1.0.RELEASE,JSF 2.x,JPA 2与Hibernate Provider。我将PrettyFaces 3.3.2用于友好的URL。该应用程序在Tomcat 6.35上运行。托管豆与自定义ViewScope
我想使用JSF ViewScope所以我决定追随在网络上找到的实现:http://comdynamics.net/blog/109/spring3-jsf2-view-scope/
public class ViewScope implements Scope {
private static final Logger logger = LoggerFactory.getLogger(ViewScope.class);
@Override
public Object get(String name, ObjectFactory objectFactory) {
final Map<String, Object> viewMap = FacesContext.getCurrentInstance().getViewRoot().getViewMap();
Object instance = viewMap.get(name);
if (instance == null) {
instance = objectFactory.getObject();
viewMap.put(name, instance);
}
return instance;
}
@Override
public Object remove(String name) {
logger.debug("ViewScope::remove {}", name);
return FacesContext.getCurrentInstance().getViewRoot().getViewMap().remove(name);
}
@Override
public String getConversationId() {
return null;
}
@Override
public void registerDestructionCallback(String name, Runnable callback) {
//Not supported
}
@Override
public Object resolveContextualObject(String key) {
return null;
}
}
我注意到@PreDestroy
不叫上他们喜欢表演这个问题@PreDestroy never called on @ViewScoped。
这是否意味着带有ViewScope的托管bean永远不会被破坏?哪些行为发生内存泄漏。我们是否应该使用这个范围?
它只发生在Spring上的自定义Viewscope或Mojarra上吗?
谢谢。
在mojarra @PreDestroy被调用,至少它在我的方法中。我认为如果你使用纯粹的JSF 2支持bean,你会节省很多麻烦。 – IturPablo
@IturPablo你在项目中使用Spring吗? –
Yess !!!,我可以使用JSF标签并访问使用@ManageProperty(“#{}”)标签提供的服务bean。在我看来,更好地使用纯粹的JSF bean,你可以避免一些麻烦,并且你确信你正在使用的jsf版本。 – IturPablo