代码之家  ›  专栏  ›  技术社区  ›  euraad

为什么我的网格显示实体字段-Vaadin 14

  •  0
  • euraad  · 技术社区  · 5 年前

    我有这些实体。

    @Entity
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class Language {
        
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
        
        @NotNull
        private String language;
    }
    

    以及

    @Entity
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class Sentence {
        
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private Long id;
        
        @NotNull
        private String wordInFrench;
        
        @NotNull
        private String wordInOtherLanguage;
        
        @ManyToOne(cascade = CascadeType.ALL)
        @NotNull
        private Language language;
        
    }
    

    其目的是创建一个淹没式组合框,它使用以下代码:

    @Route("addSentence")
    @CssImport("./styles/shared-styles.css")
    @CssImport(value = "./styles/vaadin-text-field-styles.css", themeFor = "vaadin-text-field")
    public class AddSentenceView extends AppLayout {
    
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
    
        
        public AddSentenceView(SentenceService sentenceService, LanguageService languageService) {
            Top top = new Top();
            top.setTopAppLayout(this);
            
            // crud instance
            GridCrud<Sentence> crud = new GridCrud<>(Sentence.class);
                    
            // grid configuration
            crud.getGrid().setColumns("wordInFrench", "wordInOtherLanguage", "language");
            crud.getGrid().setColumnReorderingAllowed(true);
            
            // form configuration
            crud.getCrudFormFactory().setUseBeanValidation(true);
            crud.getCrudFormFactory().setVisibleProperties("wordInFrench", "wordInOtherLanguage", "language");
            crud.getCrudFormFactory().setFieldProvider("language",
                    new ComboBoxProvider<>("Language", languageService.findAll(), new TextRenderer<>(Language::getLanguage), Language::getLanguage));
            
            // layout configuration
            setContent(crud);
            
            // logic configuration
            crud.setOperations(
                    () -> sentenceService.findAll(),
                    sentence -> sentenceService.save(sentence),
                    sentence -> sentenceService.save(sentence),
                    sentence -> sentenceService.delete(sentence)
            );
            
        }
    
    }
    

    但结果是这样的。我只想看看属性 language . 不是 Language(id = 5, language = fikus") . 我该怎么做才能做到呢?

    enter image description here

    我用的是瓦丁14加积垢。 https://vaadin.com/directory/component/crud-ui-add-on

    0 回复  |  直到 5 年前
        1
  •  2
  •   Erik Lumme    5 年前

    Language toString

    Language#toString 方法由Lombok生成。

    你可以试试换衣服 "language" "language.language" 获取实际的字符串字段。另一个选项是手动将列添加为 addColumn(sentence -> sentence.getLanguage().getLanguage())

    CascadeType.ALL 你的关系 Sentence 语言 . 这意味着如果你删除一个句子,它也会删除该语言。