[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); }