【问题标题】:How do I hide Menu whose children are hidden?如何隐藏其子项被隐藏的菜单?
【发布时间】:2015-07-14 11:14:16
【问题描述】:

我在 Eclipse 4 应用程序项目的主菜单上有一些菜单,它们的子项是在来自不同插件的片段的帮助下贡献的。我已根据登录用户对子菜单应用权限。 我的问题是即使在菜单的子菜单没有权限并且它们都不可见但菜单仍然可见之后。我想隐藏那个菜单。任何建议。

更新:我的模型处理器和 plugin.xml 类

public class MenuProcessor {
  public MenuProcessor(){}
  @Execute
  public void execute(@Named("application_luna.menu.contract(fo)") MMenu menu)
  {
     if(menu.getChildren().isEmpty())
         menu.setVisible(false);
  }
}
 <extension
     id="com.swte.approval.ui.fragment"
     point="org.eclipse.e4.workbench.model">
  <fragment
        uri="fragment.e4xmi">
  </fragment>
  <processor
        apply="always"
        beforefragment="false"
        class="com.swte.approval.ui.MenuProcessor1">
  <element
    id="application_luna.menu.contract(fo)">
    </element>
 </processor>

`

【问题讨论】:

    标签: eclipse menu eclipse-luna e4


    【解决方案1】:

    您可以通过菜单上的processor 来执行此操作。

    您在 plugin.xml 中将处理器声明为“org.eclipse.e4.workbench.model”扩展点的一部分。

    <extension
         id="playerFragment"
         point="org.eclipse.e4.workbench.model">
      ... other elmeents
      <processor
            beforefragment="false"
            class="package.MenuProcessor">
         <element
               id="menu.id">
         </element>
      </processor>
    </extension>
    

    声明命名要运行的类和它适用的模型元素。

    然后,处理器代码可以注入命名菜单,如果没有子菜单,则使其不可见。类似的东西(未测试):

    public class MenuProcessor
    {
      @Inject @Named("menu.id")
      private MMenu menu;
    
      @Execute
      public void execute()
      {
        if (menu.getChildren().isEmpty())
          menu.setVisible(false);
      }
    

    注意:您必须将菜单元素作为字段注入到类中,将其指定为execute 方法的参数将不起作用。这是因为该元素只有在构造类时才可用于注入。

    【讨论】:

    • 先生,我收到以下消息:无法处理“MenuProcessor.menu”:未找到参数“MMenu[@javax.inject.Named(value=application_luna.menu.contract) 的实际值” (fo))]" 其中 MenuProcessor 是处理器的类
    • 好吧,我处理了异常,但我认为模型处理器永远不会执行。我试着打印一些东西。任何建议。
    • 在这里进行良好的测试。您必须向我们展示您的代码。
    • 嗯,构造函数被触发了,但是execute方法没有被触发。
    • 您必须将菜单作为我展示的类中的字段注入,而不是作为execute 方法的参数。菜单只有在类被构建时才可以注入。
    猜你喜欢
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多