java - Pasar parámetros mientras se muestra una vista en Eclipse RCP
eclipse-plugin eclipse-rcp (3)
Aquí están los buenos enlaces intente esto ..
http://tomsondev.bestsolution.at/2011/02/07/enhanced-rcp-how-views-can-communicate-the-e4-way/
Estoy creando una aplicación eclipse RCP y estoy atascado con el parámetro de paso al mostrar una vista. Como primera aproximación, intenté establecer una variable estática en View2 desde View1 y abrí esa vista (como se muestra a continuación). Funciona.
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) {...}
Como esto no parece ser un buen enfoque, lo intenté según la sugerencia mencionada en el enlace a continuación (respuesta aceptada). Pasar parámetros a la vista . En este enfoque, podemos pasar parámetros solo después de mostrar la vista.
Pero el problema que tengo es que la vista que se debe abrir debe tener el valor de la fila seleccionada al llamar a showView (), es decir, quiero completar los parámetros en la Vista 2 según la selección de Vista 1. ¿Hay alguna forma de lograr esto? ¿Es bueno usar PULL en lugar de PUSH? Cualquier sugerencia es apreciada. ¡¡¡Gracias!!!
ACTUALIZACIÓN 1: Método mencionado en Pasar parámetros a la vista Interfaz:
public interface ICommunicationView extends IViewPart{
public void accept(Object parameter);
}
Llamar 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());
}
Imprime Id de estudiante como nulo.
¿Me estoy perdiendo algo obvio?
¡Gracias!
La plataforma llama a createPartControl
cuando la vista se abre mediante activePage.showView(viewIdToOpen)
. Entonces no createPartControl
sus campos en createPartControl
. Hazlo cuando se setStudentId
.
También encontré este problema. Encontré una forma de solucionarlo reempacando el componente de vista específico que necesita ser actualizado. Aquí hay una prueba de concepto que establece una cadena:
Interfaz Setter:
public interface ViewSetter {
void setMessage(String message);
}
Vista que se inicializa:
//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);
}
});
}
Código que crea e inicializa la vista:
IViewPart view = page.showView(viewID);
ViewSetter viewSetter = (ViewSetter)view;
viewSetter.setMessage("Hello World");