2017-08-01 2 views
0

J'ai mis en œuvre une application RCP e4 et je veux cacher des pièces pour les utilisateurs spéciaux. En e3, je sais que je peux faire cela avec une classe de perspective qui implémente l'IPerspectiveFactory.RCP e4 masquer les pièces

Mon sollution actuelle est:

@PostConstruct 
private void init(EPartService partService) { 
    MPart part = partService.findPart("part.id.activity"); 
    partService.hidePart(part, true); 
} 

Je le fais dans la classe partie et quand je lance ma demande que je reçois ce injectionexcetion:

ENTRÉE org.eclipse.e4.ui. workbench 4 0 2017-08-01 09: 08: 06.139 ! MESSAGE Impossible de créer la classe 'application.parts.activityPart.ActivityPart' du paquet '135' ! STACK 0 org.eclipse.e4.core.di.InjectionException : Impossible de traiter "ActivityPart # createComposite()": aucune valeur réelle e a été trouvé pour l'argument "Composite". à org.eclipse.e4.core.internal.di.InjectorImpl.reportUnresolvedArgument (InjectorImpl.java:476) à org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated (InjectorImpl.java:987) à org.eclipse.e4.core.internal.di.InjectorImpl.inject (InjectorImpl.java:124) à org.eclipse.e4.core.internal.di.InjectorImpl.internalMake (InjectorImpl.java:399) à org. eclipse.e4.core.internal.di.InjectorImpl.make (InjectorImpl.java:318) à org.eclipse.e4.core.contexts.ContextInjectionFactory.make (ContextInjectionFactory.java:162) à org.eclipse.e4. ui.internal.workbench.ReflectionContributionFactory.createFromBundle (ReflectionContributionFactory.java:105) à org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate (ReflectionContributio) nFactory.java:74) à org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create (ReflectionContributionFactory.java:56) à org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget (ContributedPartRenderer.java:129) à org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget (PartRenderingEngine.java:997) à org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine. safeCreateGui (PartRenderingEngine.java:666) à org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui (PartRenderingEngine.java:772) à org.eclipse.e4.ui.internal.workbench.swt. PartRenderingEngine.access $ 0 (PartRenderingEngine.java:743) à org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine $ 2.run (PartRenderingEngine.java:737) à org.eclipse.core.runtime.SafeRunner.run (SafeRunner.java:42) à org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui (PartRenderingEngine.java:721) à org. eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab (StackRenderer.java:1289) à org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.lambda $ 0 (LazyStackRenderer.java:68) à org.eclipse.e4.ui.services.internal.events.UIEventHandler $ 1.run (UIEventHandler.java:40) à org.eclipse.swt.widgets.Synchronizer.syncExec (Synchronizer.java:233) à org. eclipse.swt.widgets.Display.syncExec (Display.java:4889) ...

Répondre

1

N'essayez pas de masquer une pièce pendant l'initialisation de la pièce.

Si vous savez que vous ne souhaitez pas afficher une pièce lors du démarrage de l'application, vous pouvez désactiver son indicateur "À rendre" dans votre classe LifeCycle.

Par exemple:

@ProcessAdditions 
public void processAdditions(MApplication app, EModelService modelService) 
{ 
    MUIElement el = modelService.find("part.id.activity", app); 
    if (el != null) { 
    el.setToBeRendered(false); 
    } 
}