如何解决为什么我的网格显示实体字段-Vaadin 14
我有这些实体。
@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;
}
目的是创建一个drowndown组合框,并使用以下代码进行操作:
@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","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.delete(sentence)
);
}
}
但是结果看起来像这样。我只想查看属性language
。不是Language(id = 5,language = fikus")
。我该怎么做才能做到这一点?
我正在使用Vaadin 14,并添加了CRUD。 https://vaadin.com/directory/component/crud-ui-add-on
解决方法
Language
字段是一个对象,由于您尚未定义如何显示它,因此它默认为toString
方法。
您在网格中看到的是Lombok生成的Language#toString
方法的输出。
您可以尝试将"language"
更改为"language.language"
以获取实际的String字段。另一种选择是将列手动添加为addColumn(sentence -> sentence.getLanguage().getLanguage())
。
P.S:您可能不希望在从CascadeType.ALL
到Sentence
的关系中使用Language
。这意味着,如果删除句子,它也会删除语言。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。