我在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>
`
答案 0 :(得分:0)
您可以使用菜单上的processor执行此操作。
您将plugin.xml中的处理器声明为&#39; org.eclipse.e4.workbench.model&#39;的一部分。延伸点。
<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
方法上的参数将不起作用。这是因为元素仅在构造类时可用于注入。