在Eclipse RCP中显示视图时传递参数

我正在创建eclipse RCP应用程序,并且在显示视图时我坚持传递参数。 作为第一种方法,我尝试在View1中设置View2中的静态变量并打开该视图(如下所示)。 有用。

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方法很好吗? 任何建议表示赞赏。 谢谢!!!

更新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());    
}

它将学生证打印为空。

我错过了明显的东西吗?

谢谢!


平台在通过activePage.showView(viewIdToOpen)打开视图时调用createPartControl 。 所以不要在createPartControl上填充你的字段。 当setStudentId时执行此setStudentId


这里是很好的链接试试这个..

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


我也遇到过这个问题。 通过重新包装需要更新的特定视图组件找到解决方法。 这是一个设置字符串的概念证明:

安装人员界面:

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");
链接地址: http://www.djcxy.com/p/3081.html

上一篇: Passing parameters while showing a view in Eclipse RCP

下一篇: Java.util.Date vs Java.sql.Date