マスター タブから行を選択すると動的にタブが作成され、メイン アプリケーション ページを離れずに 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;
}
}