Spring 3.1.0.RELEASE、JSF 2.x、JPA 2 と Hibernate Provider を使用して Web アプリケーションを実行しています。わかりやすい URL には PrettyFaces 3.3.2 を使用します。アプリケーションは Tomcat 6.35 で実行されます。
Jsf ViewScope を使用したかったので、Web で見つかった実装に従うことにしました: 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
show this question @PreDestroy never called on @ViewScopedのように、それらが呼び出されていないことに気付きました。
ViewScope を持つ Managed Bean は destruct されないということですか? メモリリークを行う行為。このスコープを使用する必要がありますか?
Spring または Mojarra のカスタム Viewscope でのみ発生しますか?
ありがとう。