hi , its working on vaadin 7?
[code]
public class CAutoSuggest extends VerticalLayout {
// layout for popupview content, vertical
private VerticalLayout popUpLayout;
// autosuggestfld, field where listener triggers the popup to be shown
private CTextField autoSuggestFld;
// resultstable that shows the filtered values
private Table resultsTable;
// filterfld used to filter search request
private CTextField filterFld;
// popupview
private PopupView popupView;
private boolean isSearchOn = true;
private boolean tableRowSelected = false;
private List<AutoSuggestResultBean> resultset;
private String inputValue;
private AutoSuggestResultsetBuilder autoSuggestResultsetBuilder;
private boolean valueChanged = false;
public CAutoSuggest() {
initAutoSuggestFld();
initTable();
initFilterFld();
initPopUpLayout();
initPopUpView();
registerListeners();
addComponent(autoSuggestFld);
addComponent(popupView);
}
private void registerListeners() {
registerAutoSuggestFldListeners();
registerResultsTableListeners();
registerPopUpViewListeners();
registerFilterFldListeners();
}
private boolean filterFldListening = true;
private void registerFilterFldListeners() {
filterFld.addListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
if (valueChanged == true && filterFldListening) {
inputValue = (String) event.getProperty().getValue();
resultset = autoSuggestResultsetBuilder.getResultset();
setResultsTableValues();
valueChanged = false;
}
}
});
filterFld.addListener(new TextChangeListener() {
@Override
public void textChange(TextChangeEvent event) {
if (filterFldListening) {
inputValue = event.getText();
resultset = autoSuggestResultsetBuilder.getResultset();
setResultsTableValues();
}
}
});
}
public interface AutoSuggestResultsetBuilder {
public List<AutoSuggestResultBean> getResultset();
}
public void setResultsTableValues(
AutoSuggestResultsetBuilder autoSuggestResultsetBuilder) {
this.autoSuggestResultsetBuilder = autoSuggestResultsetBuilder;
}
private void registerPopUpViewListeners() {
popupView.addListener(new PopupVisibilityListener() {
public void popupVisibilityChange(PopupVisibilityEvent event) {
if (!event.isPopupVisible()) {
if (!tableRowSelected) {
autoSuggestListening = false;
autoSuggestFld.setValue("");
autoSuggestListening = true;
}
tableRowSelected = false;
filterFldListening = false;
filterFld.setValue("");
filterFldListening = true;
}
}
});
}
private void registerResultsTableListeners() {
resultsTable.addListener(new ValueChangeListener() {
public void valueChange(ValueChangeEvent event) {
Object value = resultsTable.getValue();
if (value != null) {
autoSuggestListening = false;
autoSuggestFld.setValue(resultsTable
.getContainerProperty(value, "value").getValue()
.toString());
autoSuggestListening = true;
tableRowSelected = true;
popupView.setPopupVisible(false);
filterFldListening = false;
filterFld.setValue("");
filterFldListening = true;
}
}
});
}
private boolean autoSuggestListening = true;
private void registerAutoSuggestFldListeners() {
autoSuggestFld.addListener(new TextChangeListener() {
public void textChange(TextChangeEvent event) {
if (event.getText().length() > 0 && isSearchOn
&& autoSuggestListening) {
popupView.setPopupVisible(true);
valueChanged = true;
filterFld.setValue(event.getText());
filterFld.focus();
filterFld.setCursorPosition(autoSuggestFld
.getCursorPosition());
}
}
});
}
private void initTable() {
resultsTable = new Table();
resultsTable.setSelectable(true);
resultsTable.addContainerProperty("id", String.class, null);
resultsTable.addContainerProperty("value", String.class, null);
resultsTable.setWidth("200px");
resultsTable.setImmediate(true);
resultsTable.setColumnHeaderMode(Table.COLUMN_HEADER_MODE_HIDDEN);
resultsTable.setVisibleColumns(new Object { "value" });
}
public void setResultsTableValues(List<AutoSuggestResultBean> values) {
resultsTable.removeAllItems();
for (AutoSuggestResultBean bean : values) {
Object item = resultsTable.addItem();
resultsTable.getContainerProperty(item, "id")
.setValue(bean.getId());
resultsTable.getContainerProperty(item, "value").setValue(
bean.getValue());
}
}
public void setResultsTableValues() {
resultsTable.removeAllItems();
for (AutoSuggestResultBean bean : resultset) {
Object item = resultsTable.addItem();
resultsTable.getContainerProperty(item, "id")
.setValue(bean.getId());
resultsTable.getContainerProperty(item, "value").setValue(
bean.getValue());
}
}
private void initAutoSuggestFld() {
autoSuggestFld = new CTextField();
autoSuggestFld.setWidth("100px");
autoSuggestFld.setImmediate(true);
}
private void initFilterFld() {
filterFld = new CTextField();
filterFld.setWidth("200px");
filterFld.setImmediate(true);
}
private void initPopUpLayout() {
popUpLayout = new VerticalLayout();
popUpLayout.setWidth("200px");
popUpLayout.addComponent(filterFld);
popUpLayout.addComponent(resultsTable);
}
private void initPopUpView() {
popupView = new PopupView(null, popUpLayout);
popupView.setHideOnMouseOut(false);
}
public VerticalLayout getPopUpLayout() {
return popUpLayout;
}
public CTextField getAutoSuggestFld() {
return autoSuggestFld;
}
public Table getResultsTable() {
return resultsTable;
}
public CTextField getFilterFld() {
return filterFld;
}
public PopupView getPopupView() {
return popupView;
}
public boolean isSearchOn() {
return isSearchOn;
}
public void setSearchOn(boolean isSearchOn) {
this.isSearchOn = isSearchOn;
}
public void setMaxLength(int maxLength) {
this.autoSuggestFld.setMaxLength(maxLength);
this.filterFld.setMaxLength(maxLength);
}
public String getInputValue() {
return inputValue;
}
}
public class AutoSuggestResultBean {
private String id;
private String value;
public AutoSuggestResultBean() {
super();
}
public AutoSuggestResultBean(String id, String value) {
this();
this.id = id;
this.value = value;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
[/code]When implementing:
CAutoSuggest workOrderSuggestFld = new CAutoSuggest();
workOrderSuggestFld
.setResultsTableValues(new AutoSuggestResultsetBuilder() {
@Override
public List<AutoSuggestResultBean> getResultset() {
return myMethodReturnsAListOfAutoSuggestResultBean();
}
})
This works currently, it’s not an addon, just customized a few classes. Would be really happy if someone could improve the code. By the way built with vaadin 6. Just change the listeners and I guess it’ll work for vaadin 7.
15501.java (522 Bytes)
15502.java (6.75 KB)
15503.java (2.34 KB)
I’v been a problem with this component, when I use like this :
field.setValue(“Any value”)
The field stay empty.
anybody have this problems with this ?