你也可以传递参数到 commands,选择一个 command,然后在参数下点击[添加]按钮。
ID 是你用来获取通过@Named
注解注入的参数值的标识,
在你的 HandledMenuItem 或 HandledToolItem 中,添加一个参数,然后将来自 Name 字段定义的 command 参数放进去。Value 字段传递给 command 的 handler。
警告,参数的 ID 是重要的,ID 必须通过 @Named 注解来注入,并且在定义菜单或工具条时用作 Name(第二个字段)。这在下面的图中高亮显示:
为了得到注入到你的 handler 类中的参数,你通过 @Named 注解指定参数的 ID,这通过下面的代码演示:
package com.example.e4.rcp.todo.handlers;
import java.util.List;
import javax.inject.Named;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.model.application.ui.advanced.MPerspective;
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
import org.eclipse.e4.ui.workbench.modeling.EModelService;
import org.eclipse.e4.ui.workbench.modeling.EPartService;
// switcher perspectives based on a command parameter
public class PerspectiveSwitchHandler {
@Execute
public void switchPerspective(MWindow window,
EPartService partService,
EModelService modelService,
@Named("perspective_parameter") String perspectiveId) {
// use parameter to find perspectives
List<MPerspective> perspectives = modelService.findElements(window,
perspectiveId, MPerspective.class, null);
// switch to perspective with the ID if found
if (!perspectives.isEmpty()) {
partService.switchPerspective(perspectives.get(0));
}
}
}
提示:除了注入每个参数,你也可以注入 ParameterizedCommand command,然后通过 API 来访问参数。
package com.example.e4.rcp.todo.handlers;
import javax.inject.Named;
import org.eclipse.e4.core.di.annotations.Execute;
public class TestHandlerWithCommandInjected {
private String parametername = "com.example.e4.rcp.todo" +
".commandparameter.input";
@Execute
public void execute(ParameterizedCommand command) {
Object queryId = command.getParameterMap().get(parametername);
// more...
}
}