[Seasar][Uruma] @InitializeMethod でWidgetバインディングのオブジェクトがnull


ComponentUtil#invokeInitMethodOnActionでWidgetバインディングしていますが、viewPart#renderの前のためcontextにWidgetがまだ登録されていません。

viewPart#renderの後にComponentUtil#invokeInitMethodOnActionを実施するようにしましたがどうでしょうか。

  /*
     * @see org.eclipse.ui.part.ViewPart#init(org.eclipse.ui.IViewSite,
     *      org.eclipse.ui.IMemento)
     */
    @Override
    public void init(final IViewSite site, final IMemento memento)
            throws PartInitException {
        super.init(site, memento);

        S2ContainerUtil.injectDependency(this, service.getContainer());

        this.componentId = service.getLocalId(getSite().getId());

        if (StringUtil.isNotBlank(componentId)) {
            service.getContainer().register(this, componentId);
        }

        Template template = templateManager.getTemplateById(componentId);
        UIComponentContainer root = template.getRootComponent();
        if (root instanceof ViewPartComponent) {
            this.viewPart = (ViewPartComponent) root;

            this.partContext = createPartContext(componentId);

            this.partAction = ComponentUtil.setupPartAction(partContext,
                    componentId);

            if (partAction != null) {
                ComponentUtil.setupFormComponent(partContext, componentId);

                // @Initialize メソッドの呼び出し
                // ComponentUtil.invokeInitMethodOnAction(partAction, partContext);
            }
        } else {
            throw new RenderException(
                    UrumaMessageCodes.REQUIRED_VIEWPART_ERROR, template
                            .getPath());
        }
    }

    /**
     * {@link GenericViewPart} を構築します。<br />
     */
    public GenericViewPart() {
    }

    @Override
    public void createPartControl(final Composite parent) {
        WidgetHandle parentHandle = ContextFactory.createWidgetHandle(parent);
        parentHandle.setUiComponent(service.getWorkbenchComponent());

        viewPart.render(parentHandle, partContext);

        prepareSelectionProvider(partContext);

        setupSelectionListeners();

        // @Initialize メソッドの呼び出し
        ComponentUtil.invokeInitMethodOnAction(partAction, partContext);

        // 画面初期表示時の、フォームから画面へのエクスポート処理を実施
        ValueBindingSupport.exportValue(partContext);
        ValueBindingSupport.exportSelection(partContext);
    }