我正在使用eclipse RCP。我在表格中有一个项目,当我双击该项目时,它会打开一个视图。如果用户无权访问该视图,则用户无法打开该视图。
所以我检查了该项目用户的访问权限,并关闭了透视图。
if (!user.hasReadAccess())
final IWorkbenchWindow[] windows = PlatformUI.getWorkbench().getWorkbenchWindows();
for (int w = 0; w < windows.length; w++)
{
final IWorkbenchPage[] pages = windows[w].getPages();
for (int p = 0; p < pages.length; p++)
{
final IWorkbenchPage page = pages[p];
// page.hideView(page.findView(MYViewID));
final IViewReference[] viewRefs = page.getViewReferences();
for (int v = 0; v < viewRefs.length; v++)
{
for (IPerspectiveDescriptor ipd : page.getOpenPerspectives())
{
if (ipd.getId().equalsIgnoreCase(PERSPECTIVE_ID))
{
page.closePerspective(page.getPerspective(), true, true);
break;
}
}
}
}
}
它隐藏了透视图,但它始终打开透视图并立即关闭它。
换句话说,即使在调用closePerspective()
之后,仍然会调用CreatePartControl
的{{1}}方法,并且用户可以看到视图立即打开和关闭。是什么导致了这个问题,我该如何解决?
答案 0 :(得分:0)
IWorkbenchPage上应该有一个用于打开视图的方法:
public IViewPart showView(String viewId, String secondaryId, int mode)
throws PartInitException;
你应该在if条件中调用此方法
if ( userHasReadAccess ) {
page.showView(viewId, secondaryId, IworkbenchPage.VIEW_ACTIVATE );
}