我正在尝试创建一个动态选项卡,其中从主选项卡中选择一行会动态创建一个选项卡并添加到 Primefaces TabView 而不离开主应用程序页面。我正在为主选项卡使用母版页(例如 countryMaster.xhtml),并为详细选项卡选择的每一行重新使用详细信息页(例如:countryDetail.xhtml)。
我想创建一个基于 ViewScope 的自定义“TabScope”自定义范围,其中我可以将详细选项卡的 tabId 绑定到支持 bean 并存储在 ViewMap 中。
- 我怎样才能做到这一点?
- 这可能吗?
- 如何获取使用支持 bean 实例的选项卡的 tabId?
谢谢!!
前任:
public class TabScope implements Scope {
public Object get(String name, ObjectFactory objectFactory) {
Map<String,Object> viewMap = FacesContext.getCurrentInstance().getViewRoot().getViewMap();
String tabId = null;
//Get tabId that uses this backing bean
if (tabId != null) {
if (viewMap.containsKey(name)) {
final Object object = viewMap.get(name);
if (object instanceof Map<?, ?>) {
final Map<String, Object> mapObject = (Map<String, Object>) object;
if (mapObject.containsKey(tabId)) {
return mapObject.get(tabId);
}
}
}
Object object = objectFactory.getObject();
Map<String, Object> tabIdBeanMap = new HashMap<String, Object>(1);
tabIdBeanMap.put(tabId, object);
viewMap.put(name, tabIdBeanMap);
return object;
} else {
String message = "TabId not found.";
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, message, null));
return null;
}
}