Hi,
I want to share data between 2 Views. For exemple, I have a JList with some values in a fisrt View and I want that selected item of this JList were displayed in JList in a second View.
To do that i use:
list.addListSelectionListener(new ListSelectionListener(){
public void valueChanged(ListSelectionEvent arg0) {
getApplicationContext()
.publishEvent(new LifecycleApplicationEvent("SELECTED_ITEM", listOnFisrtView.getSelectedValues()));
}
});
and my second View implements ApplicationListener.
public void onApplicationEvent(ApplicationEvent arg0) {
LifecycleApplicationEvent event= (LifecycleApplicationEvent)arg0;
if(event.getEventType().equals("SELECTED_ITEM")){
listOnSecondView.removeAll();
listOnSecondView.setListData((Object[])event.getSource());
listOnSecondView.updateUI();
}
}
The problem is that I must open the second view one time before making my selection. If i don't proceed like that, it doesn't work.
Questions are:
1) Is my solution the right way to what i want?
2) Is it normal that all Views don't be instanciate and register with the applicationEventMulticaster at startup? How change that?
3) I resolve my problem whit implementing a new applicationEventMulticaster
public class CachedApplicationEventMultiCaster extends SimpleApplicationEventMulticaster
{
private Hashtable hTable = new Hashtable();
public void multicastEvent(ApplicationEvent arg0) {
if (arg0 instanceof LifecycleApplicationEvent ) {
LifecycleApplicationEvent event = (LifecycleApplicationEvent) arg0;
hTable.put(event.getEventType(), event.getSource());
}
super.multicastEvent(arg0);
}
public void addApplicationListener(ApplicationListener arg0) {
super.addApplicationListener(arg0);
Enumeration eventType = hTable.keys();
Object type;
while (eventType.hasMoreElements()) {
type = eventType.nextElement();
arg0.onApplicationEvent(new LifecycleApplicationEvent((String) type, hTable.get(type)));
}
}
}
Is someone have an other idea?
Thanks


Reply With Quote