Невозможно отобразить данные в сетке с помощью BeanItemContainer из компонента, имеющего сложную структуру - PullRequest
0 голосов
/ 11 января 2019

Спасибо за вашу помощь заранее. Я начал использовать vaadin 7 - компонент сетки для отображения данных из немного сложной структуры бина. Я получаю следующее исключение, и я не могу понять, как определить структуру POJO в BeanItemContainer, используя addContainerProperty & addNestedContainerProperty. Пожалуйста, помогите мне с кодом. Нужно ли мне менять дизайн Pojo's?

 java.lang.UnsupportedOperationException: Use 
 addNestedContainerProperty(String) to add container properties to a 
 BeanItemContainer

Ниже приведен код, который я пытаюсь,

    ConfigProperty configPropertyA = new ConfigProperty();
    configPropertyA.setProperty("SERVER1", "vm1");
    configPropertyA.setProperty("db.user", "admin");

    ConfigProperty configPropertyB = new ConfigProperty();
    configPropertyB.setProperty("SERVER2", "vm2");
    configPropertyB.setProperty("db.user", "admin1");

    Service service = new Service("app.jdbc.driver");
    service.addConfigProperty(configPropertyA);
    service.addConfigProperty(configPropertyB);

    BeanItemContainer<Service> beanItemContainer = new BeanItemContainer<Service>(Service.class);
    beanItemContainer.addContainerProperty("id", Service.class, "");
    beanItemContainer.addNestedContainerProperty("configPropertyList.map");

Pojos

       public class Service {

   /**
    * @param args
    */
   private String id;
   private List<ConfigProperty> configPropertyList = new ArrayList<ConfigProperty>();


   public Service() {
   }

   public Service(String id) {
      this.id=id;
   }


   /**
    * @return the id
    */
   public String getId() {
      return id;
   }

   /**
    * @param id the id to set
    */
   public void setId(String id) {
      this.id = id;
   }

   /**
    * @return the configPropertyList
    */
   public List<ConfigProperty> getConfigPropertyList() {
      return configPropertyList;
   }

   /**
    * @param configPropertyList the configPropertyList to set
    */
   public void addConfigProperty(ConfigProperty configProperty) {
      this.configPropertyList.add(configProperty);
   }

}

public class ConfigProperty {


   private Map<String, String> map = new HashMap<String, String>();

   /*'***************************************************************************************
   *   Static/Inner class members                                         
   ******************************************************************************************/

   /*'***************************************************************************************
   *   Class members                                         
   ******************************************************************************************/

   /**
    * @return the map
    */
   public Map<String, String> getMap() {
      return map;
   }

   /**
    * @param map the map to set
    */
   public void setProperty(String key, String value) {
      this.map.put(key, value);
   }

   /**
    * @param map the map to remove
    */
   public void removeProperty(String key) {
      this.map.remove(key);
   }

}
...