Hi,
I have a TextField and a ComboBox. The ComboBox’s dataprovider is equipped with a filter dependent on TextField input. So I add a valuechange listener to TextField which take input to reset the ComboBox’s filter. Here are my sample codes:
.....
TextField username = new TextField( "username:" );
username.setValueChangeMode( ValueChangeMode.ON_BLUR );
ListDataProvider dataProvider = DataProvider.ofCollection( ... );//some ArrayList<HashMap>
dataProvider.setFilter( row -> ( ( HashMap ) row ).get( "userid" ).equals( username.getValue() ) );
ComboBox database = new ComboBox( "database:" );
database.setDataProvider( dataProvider );
database.setItemLabelGenerator( row -> ( String ) ( ( HashMap ) row ).get( "databaseid" ) );
username.addValueChangeListener( event -> {
if ( event.isFromClient() ) {
dataProvider.setFilter( row -> ( ( HashMap ) row ).get( "userid" ).equals( event.getValue() ) );
List itemsFromDataProvider = ...;//get List of filtered items from dataprovider
if ( itemsFromDataProvider.size() > 0 ) {
errordiv.setVisible( false );
database.setValue( itemsFromDataProvider.get( 0 ) );
}
else {
database.setValue( database.getEmptyValue() );
if ( event.getValue() != null && event.getValue().length() > 0 ) {
errordiv.setVisible( true );
}
else {
errordiv.setVisible( false );
}
}
}
} );
.....
The wield behavior is when the valuechangelistener is called whenever any key was hit. I changed the ValueChangeMode to ON-CHANGE, and the behavior is the same. I am using 11.0.3. Please kindly advise where I was wrong.
Best regards,
Joey