【问题标题】:How to stop opening a viewpart in eclipse RCP?如何停止在 Eclipse RCP 中打开视图部分?
【发布时间】:2015-12-16 00:42:24
【问题描述】:

我正在使用 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() 之后,仍然会调用ViewPartCreatePartControl 方法,并且用户可以看到视图立即打开和关闭。是什么导致了这个问题,我该如何解决?

【问题讨论】:

  • 我不明白打开视图与关闭某个视角有何关系。顺便说一句,您能以合理的方式重新格式化代码吗?

标签: java eclipse-plugin swt eclipse-rcp


【解决方案1】:

IWorkbenchPage 上应该有一个方法可以用来打开如下视图:

public IViewPart showView(String viewId, String secondaryId, int mode)
            throws PartInitException;

你应该在 if 条件下调用这个方法

if ( userHasReadAccess ) {
    page.showView(viewId, secondaryId, IworkbenchPage.VIEW_ACTIVATE );
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-07
    • 2014-01-06
    • 2014-07-30
    • 2019-01-19
    • 2013-03-02
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多