Spring 如何将BeanItemContainer绑定到Combobox
我有BeanItemContainer,我通过jdbc从数据库加载它:Spring 如何将BeanItemContainer绑定到Combobox,spring,combobox,vaadin7,Spring,Combobox,Vaadin7,我有BeanItemContainer,我通过jdbc从数据库加载它: BeanItemContainer myBeans = new BeanItemContainer<>(MyBean.class, mybeanDao.findAll()); 到目前为止,一切顺利。我得到了我想要的,但现在我有个问题- 如何获取已选择的实际id?这必须同步(组合框中选择的id是数据库中的实际条目) 我不知道如何解决这个问题 请帮忙 p.S MyBean类 public class MyBean
BeanItemContainer myBeans = new BeanItemContainer<>(MyBean.class, mybeanDao.findAll());
到目前为止,一切顺利。我得到了我想要的,但现在我有个问题-
如何获取已选择的实际id?这必须同步(组合框中选择的id是数据库中的实际条目)
我不知道如何解决这个问题
请帮忙
p.S MyBean类
public class MyBean {
private Long id;
private String field1;
*** getters /setters ***
and toString() {} method
}
如果我正确理解了这个问题,combo.getValue()应该给出相对于当前选择的MyBean实例(如果没有选择任何项,则为null) 代码如下:
@Theme("mytheme")
public class MyUI extends UI {
@Override
protected void init(VaadinRequest vaadinRequest) {
final VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
layout.setSpacing(true);
setContent(layout);
BeanItemContainer myBeans = new BeanItemContainer<>(MyBean.class, getBeans());
ComboBox combo = new ComboBox();
combo.setContainerDataSource(myBeans);
combo.setItemCaptionMode(AbstractSelect.ItemCaptionMode.PROPERTY);
combo.setItemCaptionPropertyId("field");
combo.addValueChangeListener(new Property.ValueChangeListener() {
@Override
public void valueChange(Property.ValueChangeEvent event) {
MyBean bean = (MyBean) combo.getValue();
Notification notif = new Notification("Selected Bean Id: "+bean.getId(), Notification.Type.TRAY_NOTIFICATION);
notif.setPosition(Position.TOP_CENTER);
notif.show(Page.getCurrent());
}
});
layout.addComponent(combo);
}
@WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
@VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
public static class MyUIServlet extends VaadinServlet {
}
public class MyBean {
private Long id;
private String field;
public MyBean(Long id, String field) {
this.id = id;
this.field = field;
}
public Long getId() {
return id;
}
public String getField() {
return field;
}
}
public ArrayList<MyBean> getBeans() {
ArrayList<MyBean> beans = new ArrayList<>();
MyBean bean = new MyBean(1l, "Vikrant");
beans.add(bean);
bean = new MyBean(2l, "Rampal");
beans.add(bean);
bean = new MyBean(3l, "viky");
beans.add(bean);
return beans;
}
@主题(“mytheme”)
公共类MyUI扩展了MyUI{
@凌驾
受保护的void init(VaadinRequest VaadinRequest){
最终垂直布局=新建垂直布局();
布局。设置页边距(真);
布局。设置间距(真);
设置内容(布局);
BeanItemContainer myBeans=新的BeanItemContainer(MyBean.class,getBeans());
ComboBox combo=新ComboBox();
setContainerDataSource(myBeans);
setItemCaptionMode(AbstractSelect.ItemCaptionMode.PROPERTY);
combo.setItemCaptionPropertyId(“字段”);
combo.addValueChangeListener(新属性.ValueChangeListener(){
@凌驾
public void valueChange(Property.valuechangevent事件){
MyBean=(MyBean)combo.getValue();
Notification notif=新通知(“所选Bean Id:+Bean.getId(),Notification.Type.TRAY\u通知”);
notif.设置位置(上止点位置);
notif.show(Page.getCurrent());
}
});
布局。添加组件(组合);
}
@WebServlet(urlPatterns=“/*”,name=“MyUIServlet”,asyncSupported=true)
@VaadinServletConfiguration(ui=MyUI.class,productionMode=false)
公共静态类MyUIServlet扩展了VaadinServlet{
}
公共类MyBean{
私人长id;
私有字符串字段;
公共MyBean(长id,字符串字段){
this.id=id;
this.field=字段;
}
公共长getId(){
返回id;
}
公共字符串getField(){
返回字段;
}
}
公共ArrayList getBeans(){
ArrayList bean=新的ArrayList();
MyBean=新MyBean(1l,“Vikrant”);
添加(bean);
bean=新的MyBean(2l,“Rampal”);
添加(bean);
bean=新的MyBean(3l,“viky”);
添加(bean);
返豆;
}
}是的,你正确地理解了我的问题。但是,“combo.getValue()”返回“Object”对象,这很难转换为Long。但一旦完成,我在数据持久化方面遇到了一些问题—1)它会将选定项的标题写入数据库,或者。。。(我尝试使用tresspass作为toString转换为Long)整条线路(带有id和其他相关内容)我已经测试了您的选项,效果很好。但是有个问题。你们看,我有一个vaadin-spring应用程序,它假设将这个beanItemContainer附加到模态窗口。所以,当用户导航到模式窗口时,我需要从数据库中预加载bean。感谢你,我认为你的方法没有任何问题。它应该会起作用。也许你们可以分享一些代码。不幸的是,我不能在atm机上制作代码,但我会在完成后告诉你们。请继续收看。
@Theme("mytheme")
public class MyUI extends UI {
@Override
protected void init(VaadinRequest vaadinRequest) {
final VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
layout.setSpacing(true);
setContent(layout);
BeanItemContainer myBeans = new BeanItemContainer<>(MyBean.class, getBeans());
ComboBox combo = new ComboBox();
combo.setContainerDataSource(myBeans);
combo.setItemCaptionMode(AbstractSelect.ItemCaptionMode.PROPERTY);
combo.setItemCaptionPropertyId("field");
combo.addValueChangeListener(new Property.ValueChangeListener() {
@Override
public void valueChange(Property.ValueChangeEvent event) {
MyBean bean = (MyBean) combo.getValue();
Notification notif = new Notification("Selected Bean Id: "+bean.getId(), Notification.Type.TRAY_NOTIFICATION);
notif.setPosition(Position.TOP_CENTER);
notif.show(Page.getCurrent());
}
});
layout.addComponent(combo);
}
@WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
@VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
public static class MyUIServlet extends VaadinServlet {
}
public class MyBean {
private Long id;
private String field;
public MyBean(Long id, String field) {
this.id = id;
this.field = field;
}
public Long getId() {
return id;
}
public String getField() {
return field;
}
}
public ArrayList<MyBean> getBeans() {
ArrayList<MyBean> beans = new ArrayList<>();
MyBean bean = new MyBean(1l, "Vikrant");
beans.add(bean);
bean = new MyBean(2l, "Rampal");
beans.add(bean);
bean = new MyBean(3l, "viky");
beans.add(bean);
return beans;
}