传递参数而表示在Eclipse RCP的图(Passing parameters while sho

2019-10-18 07:17发布

我创建Eclipse RCP应用程序,我坚持传递参数而呈现出视图。 作为第一种方法,我试图从设置在视图1视图2一个静态变量和打开的视图(如下)。 有用。

IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();               
String viewIdToClose = studentListView.ID;
IViewPart viewToClose = activePage.findView(viewIdToClose);
TableItem item = studentTable.getItem(studentTable.getSelectionIndex());
String text = item.getText(ListViewConstants.TABLE_COLUMN_ONE);
activePage.hideView(viewToClose);
try {
    String viewIdToOpen = StudentReview.ID;
    StudentReview.userId = text;
     activePage.showView(viewIdToOpen);                 
} catch (PartInitException e) {...}

由于这似乎并没有成为一个好办法,我尝试按在下面的链接(接受的答案)中提到的建议。 将参数传递到视图 。 在这种方法中,我们可以只显示视图后传递参数。

但我有,则视图要打开的问题应该从选择行同时呼吁showView(有值),即,我想基于视图1的选择来填充视图2的参数。 有什么办法来实现这一目标? 这是好使用PULL,而不是PUSH的方式? 任何建议表示赞赏。 谢谢!!!

UPDATE 1:在方法上提到将参数传递给该视图接口:

public interface ICommunicationView extends IViewPart{
   public void accept(Object parameter);
}

调用accept():

IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
String viewIdToClose = StudentListView.ID;
IViewPart viewToClose = activePage.findView(viewIdToClose);
TableItem item = studentTable.getItem(studentTable.getSelectionIndex());
String text = item.getText(ListViewConstants.TABLE_COLUMN_ONE);
activePage.hideView(viewToClose);
try {
   String viewIdToOpen = StudentReview.ID;
   ICommunicationView viewToOpen = (ICommunicationView) activePage.showView(viewIdToOpen);
   viewToOpen.accept(text);//Sending userId to Review view
} catch (PartInitException e) { ... }

StudentReviewView:

private String studentId;
//getters and setters
@Override
public void accept(Object parameter) {
  setStudentId(parameter.toString());
}

public void createPartControl(final Composite parent) {
   ...
  System.out.println("Student Id" + this.getStudentId());    
}

它打印学生ID为空。

我失去了一些东西明显?

谢谢!

Answer 1:

平台调用createPartControl当视图被打开activePage.showView(viewIdToOpen) 所以,不填充您的域createPartControl 。 做时, setStudentId被调用。



Answer 2:

这里是良好的联系,试试这个..

http://tomsondev.bestsolution.at/2011/02/07/enhanced-rcp-how-views-can-communicate-the-e4-way/



Answer 3:

我也遇到了这个问题。 通过重新包装需要被更新的所述特定视图分量发现它周围的方式。 下面是设置一个字符串概念证明:

二传手接口:

public interface ViewSetter {    
    void setMessage(String message); 
}

认为被初始化:

//view that implements ViewSetter  

@Override
public void createPartControl(Composite parent) {       
    label = new Label(parent, SWT.NONE); //label is a field
}

@Override
public void setMessage(final String message) {
    Display.getDefault().syncExec(new Runnable() {  
        @Override
        public void run() {
            label.setText(message);
            label.pack(true);
        }
    });
}

创建和初始化视图代码:

IViewPart view = page.showView(viewID);
ViewSetter viewSetter = (ViewSetter)view;
viewSetter.setMessage("Hello World");


文章来源: Passing parameters while showing a view in Eclipse RCP