JGoodies PresentationModel绑定静态组件列表至InfoBean的问题求助
解决ListInfoBean下多组组件与单个InfoBean实例的绑定问题
看起来你卡在用ListInfoBean作为根模型时,没法直接绑定单个InfoBean的属性到组件上——毕竟当前的PresentationModelBinder是绑定在列表容器上的,自然找不到InfoBean里的属性。这里给你两种实用的解决思路,适配你固定8组组件的场景:
思路1:为每个InfoBean实例单独创建绑定器
既然你有8组组件对应8个InfoBean,最直接的方式就是给每个InfoBean实例单独配一个绑定器,然后一一绑定对应的组件。这样每一组组件都和对应的InfoBean强绑定,逻辑清晰:
// 先从你的ListInfoBean模型里拿到所有InfoBean实例 List<InfoBean> infoBeans = model.getInfoBeans(); // 把你的8组组件分别存在数组/列表里,方便循环处理 Label[] labelComponents = {label1, label2, label3, label4, label5, label6, label7, label8}; TextField[] textComponents = {textField1, textField2, ..., textField8}; ComboBox[] comboComponents = {comboBox1, comboBox2, ..., comboBox8}; // 遍历每个InfoBean,绑定对应组件 for (int i = 0; i < infoBeans.size(); i++) { InfoBean currentBean = infoBeans.get(i); PresentationModelBinder beanBinder = Binders.binderFor(currentBean); // 绑定当前bean的各个属性到对应组件 beanBinder.bindBeanProperty(InfoBean.LABEL_PROPERTY).to(labelComponents[i]); beanBinder.bindBeanProperty(InfoBean.TEXT_PROPERTY).to(textComponents[i]); beanBinder.bindBeanProperty(InfoBean.COMBOBOX_PROPERTY).to(comboComponents[i]); }
这种方式完全贴合你的需求,每个组件组都和对应的InfoBean实例一对一关联,后续维护也方便。
思路2:通过属性路径直接绑定
如果不想为每个bean单独创建绑定器,也可以利用属性路径的方式,直接从ListInfoBean定位到指定索引的InfoBean的属性。比如假设你的ListInfoBean里存储InfoBean的列表属性叫infoBeans,就可以用infoBeans[0].label这样的路径来绑定:
// 绑定第1组组件到第0个InfoBean实例 binder.bindBeanProperty("infoBeans[0].label").to(label1); binder.bindBeanProperty("infoBeans[0].text").to(textField1); binder.bindBeanProperty("infoBeans[0].ComboxBox").to(comboBox1); // 绑定第2组组件到第1个InfoBean实例 binder.bindBeanProperty("infoBeans[1].label").to(label2); binder.bindBeanProperty("infoBeans[1].text").to(textField2); binder.bindBeanProperty("infoBeans[1].ComboxBox").to(comboBox2); // ... 以此类推,直到完成8组组件的绑定
不过这种方式需要你确认ListInfoBean中列表属性的准确名称(比如上面的infoBeans),而且是硬编码索引,灵活性不如第一种思路,但对于你固定8组的场景也能正常工作。
小提醒
- 检查
InfoBean里的属性拼写:你定义的COMBOBOX_PROPERTY常量值是"ComboxBox",成员变量也是ComboxBox,注意大小写要完全一致,避免绑定的时候因为名称不匹配出问题。 - 如果后续
ListInfoBean里的InfoBean列表有动态增减的需求,第一种思路的扩展性会更好,只需要调整组件数组和循环逻辑即可。
内容的提问来源于stack exchange,提问作者facebook-100001358991487
相关产品推荐
相关产品推荐

