
uk.co.crystalmark.wicket.components.BootstrapDropdownPanel Maven / Gradle / Ivy
The newest version!
package uk.co.crystalmark.wicket.components;
import java.util.List;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.markup.html.form.ILabelProvider;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.model.util.ListModel;
public abstract class BootstrapDropdownPanel extends Panel implements ILabelProvider {
private static final long serialVersionUID = 1L;
private IModel model;
private IModel> availableList;
private IChoiceRenderer renderer;
public BootstrapDropdownPanel(final String id, final IModel model, final IModel> availableList) {
super(id, model);
this.model = model;
this.availableList = availableList;
}
public BootstrapDropdownPanel(final String id, final IModel model, final List availableList) {
this(id, model, new ListModel(availableList));
}
@Override
protected void onInitialize() {
super.onInitialize();
IModel labelModel = new LoadableDetachableModel() {
private static final long serialVersionUID = 1L;
@Override
protected String load() {
if (model.getObject() == null) {
return "Please select";
}
if (renderer == null) {
return model.getObject().toString();
} else {
return renderer.getDisplayValue(model.getObject()) + "";
}
}
};
add(new Label("triggerLabel", labelModel));
add(new ListView("options", availableList) {
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(final ListItem item) {
AjaxLink link = new AjaxLink("link") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(final AjaxRequestTarget target) {
model.setObject(item.getModelObject());
onChange(target, item.getModelObject());
}
};
item.add(link);
IModel labelModel = new LoadableDetachableModel() {
private static final long serialVersionUID = 1L;
@Override
protected String load() {
if (item.getModelObject() == null) {
return null;
}
if (renderer == null) {
return item.getModelObject().toString();
} else {
return renderer.getDisplayValue(item.getModelObject()) + "";
}
}
};
link.add(new Label("label", labelModel));
}
});
}
public BootstrapDropdownPanel setRenderer(final IChoiceRenderer renderer) {
this.renderer = renderer;
return this;
}
@Override
public IModel getLabel() {
return model;
}
public abstract void onChange(AjaxRequestTarget target, T changedTo);
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy