When using a text field or ComboBox the field focus change appears to be processed before value change. If visibility of the next field is determined by the previous field’s value. Field focus can be lost or misplaced.
Native select seems to work. TextField does not. I have so far only tested this using Liferay 6.2.ga6 and Vaadin 7.6.6., not stand-alone.
@VaadinPortletUI
public class TestUI2 extends UI{
/**
*
*/
private static final long serialVersionUID = 1L;
final static Logger log = LoggerFactory.getLogger(TestUI2.class);
VerticalLayout root = new VerticalLayout();
@Override
protected void init(VaadinRequest request) {
// Based on test-case at https://dev.vaadin.com/ticket/12730#no1
// https://vaadin.com/forum#!/thread/1326316
setContent(root);
// Text field FAIL
/*final TextField s1tf1 = new TextField();
s1tf1.setImmediate(true);*/
// even with eager text change
final TextField s1tf1 = new TextField();
s1tf1.setImmediate(true);
s1tf1.setTextChangeEventMode(TextChangeEventMode.EAGER);
// THIS WORKS!!!! change event is set immediately no chance for blur to occur before change
/*final NativeSelect s1tf1 = new NativeSelect();
s1tf1.addItems(new String[]{"Yes","No","Unknown"});
s1tf1.setImmediate(true);*/
// This fails miserably!
/*final ComboBox s1tf1 = new ComboBox();
s1tf1.addItems(new String[]{"Yes","No","Unknown"});
s1tf1.setImmediate(true);*/
// This seems better, but is not. still fails!
/*final ComboBox s1tf1 = new ComboBox();
s1tf1.addItems(new String[]{"Yes","No","Unknown"});
s1tf1.setImmediate(true);
s1tf1.setTextInputAllowed(false);*/
final TextField s1tf2 = new TextField();
s1tf2.setImmediate(true);
// Thought this might be having some effect but no.
//s1tf2.setVisible(false);
final TextField s1tf3 = new TextField();
s1tf3.setImmediate(true);
s1tf3.setTextChangeEventMode(TextChangeEventMode.EAGER);
s1tf1.addValueChangeListener(new Property.ValueChangeListener() {
@Override
public void valueChange(Property.ValueChangeEvent event) {
s1tf2.setVisible(!s1tf2.isVisible());
}
});
root.addComponent(s1tf1);
root.addComponent(s1tf2);
root.addComponent(s1tf3);
// even with hard-coded tab indexes we get problems
s1tf1.setTabIndex(701);
s1tf2.setTabIndex(702);
s1tf3.setTabIndex(703);
}
}