1

マスター タブから行を選択すると動的にタブが作成され、メイン アプリケーション ページを離れずに Primefaces TabView に追加される動的タブを作成しようとしています。マスター タブにマスター ページ (例: countryMaster.xhtml) を使用し、詳細タブに選択した各行の詳細ページ (例: countryDetail.xhtml) を再使用しています。

ViewScope に基づいてカスタム「TabScope」カスタム スコープを作成したいと思います。ここで、詳細タブの tabId をバッキング Bean にバインドし、ViewMap に格納できます。

  1. どうすればこれを達成できますか?
  2. これは可能ですか?
  3. バッキング 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;
        }       
    }
4

0 に答える 0