Spring中的JSF View范围

@ViewScopedSpring 3.0中是否有类似JSF的范围?我有一个使用JSF + Spring的应用程序,其中后备bean由Spring管理。我没有在Spring中找到像JSF wiew scope这样的范围。但是它对我没有用。

这是我对自定义Spring范围的尝试:

import java.util.Map;

import javax.faces.context.FacesContext;

import org.springframework.beans.factory.ObjectFactory;

import org.springframework.beans.factory.config.Scope;

/**

* Implements the JSF View Scope for use by Spring. This class is registered as a Spring bean with the CustomScopeConfigurer.

*/

public class ViewScope implements Scope {

public Object get(String name, ObjectFactory<?> objectFactory) {

System.out.println("**************************************************");

System.out.println("-------------------- Getting objects For View Scope ----------");

System.out.println("**************************************************");

if (FacesContext.getCurrentInstance().getViewRoot() != null) {

Map<String, Object> viewMap = FacesContext.getCurrentInstance().getViewRoot().getViewMap();

if (viewMap.containsKey(name)) {

return viewMap.get(name);

} else {

Object object = objectFactory.getObject();

viewMap.put(name, object);

return object;

}

} else {

return null;

}

}

public Object remove(String name) {

System.out.println("**************************************************");

System.out.println("-------------------- View Scope object Removed ----------");

System.out.println("**************************************************");

if (FacesContext.getCurrentInstance().getViewRoot() != null) {

return FacesContext.getCurrentInstance().getViewRoot().getViewMap().remove(name);

} else {

return null;

}

}

public void registerDestructionCallback(String name, Runnable callback) {

// Do nothing

}

public Object resolveContextualObject(String key) { return null;

}

public String getConversationId() {

return null;

}

}

application-context.xml:

<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">

<property name="scopes">

<map>

<entry key="view">

<bean class="com.delta.beans.ViewScope"/>

</entry>

</map>

</property>

</bean>

回答:

public class ViewScopeCallbackRegistrer implements ViewMapListener {

@SuppressWarnings("unchecked")

@Override

public void processEvent(SystemEvent event) throws AbortProcessingException {

if (event instanceof PostConstructViewMapEvent) {

PostConstructViewMapEvent viewMapEvent = (PostConstructViewMapEvent) event;

UIViewRoot viewRoot = (UIViewRoot) viewMapEvent.getComponent();

viewRoot.getViewMap().put(

ViewScope.VIEW_SCOPE_CALLBACKS,

new HashMap<String, Runnable>()

);

} else if (event instanceof PreDestroyViewMapEvent) {

PreDestroyViewMapEvent viewMapEvent = (PreDestroyViewMapEvent) event;

UIViewRoot viewRoot = (UIViewRoot) viewMapEvent.getComponent();

Map<String, Runnable> callbacks = (Map<String, Runnable>) viewRoot

.getViewMap().get(ViewScope.VIEW_SCOPE_CALLBACKS);

if (callbacks != null) {

for (Runnable c : callbacks.values()) {

c.run();

}

callbacks.clear();

}

}

}

@Override

public boolean isListenerForSource(Object source) {

return source instanceof UIViewRoot;

}

}

以上是 Spring中的JSF View范围 的全部内容, 来源链接: utcz.com/qa/406438.html

回到顶部