package org.zkoss.zksandbox.zkfiddle;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Label;
import org.zkoss.zul.ListModelList;
import org.zkoss.zul.Listbox;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* Created with IntelliJ IDEA.
* User: payegishemingway
* Date: 2/19/13
* Time: 9:45 AM
* To change this template use File | Settings | File Templates.
*/
public class DatabindComposer extends GenericForwardComposer {
private List<Person> persons;
private Listbox theList;
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp);
List<Person> personsList = initPersonsList();
self.setAttribute("persons", personsList);
}
public void onClick$createJohnny(Event event){
ListModelList model = (ListModelList) theList.getModel();
model.add(new Person("Johnny", new Date()));
}
public void onSelect$theList(Event event) {
updateWithJava();
updateWithJavascript();
}
private void updateWithJava() {
Label selectedName = (Label) self.getFellow("selectedNameJ");
Label selectedBirthdate = (Label) self.getFellow("selectedBirthdateJ");
Person selectedPerson = getSelectedPerson();
selectedName.setValue(selectedPerson.getName());
selectedBirthdate.setValue(selectedPerson.getBirthdate().toString());
}
private void updateWithJavascript() {
Person selectedPerson = getSelectedPerson();
Clients.evalJavaScript("zk.Widget.$('$selectedName').setValue('"
+ selectedPerson.getName() + "')");
Clients.evalJavaScript("zk.Widget.$('$selectedBirthdate').setValue('"
+ selectedPerson.getBirthdate().toString() + "')");
}
private Person getSelectedPerson() {
ListModelList listModel = (ListModelList) theList.getModel();
Person selectedPerson = (Person) listModel.getElementAt(theList
.getSelectedIndex());
return selectedPerson;
}
private List<Person> initPersonsList() {
persons = new ArrayList<Person>();
persons.add(new Person("John Doe", new Date()));
persons.add(new Person("Martin Scorsese", new Date()));
persons.add(new Person("Madonna", new Date()));
return persons;
}
}