如何使用 PostConstruct 为 addEntry 设置列表
How to set a list for addEntry with PostConstruct
直到现在,我在 getter 上添加了我想要的东西,这没有任何意义,并且在添加新条目时最终导致数据库混乱。
我目前的模型:
@Data
@Entity
public class Telefonbuch {
/*@PostConstruct
public void init() {
//geschaeftsstellen = new ArrayList<String>();
geschaeftsstellen.add("Dortmund");
System.out.println("TEEEEEEEEEEEST");
geschaeftsstellen.add("Essen");
geschaeftsstellen.add("Stralsund");
geschaeftsstellen.add("Stuttgart");
geschaeftsstellen.add("Zürich");
geschaeftsstellen.add("Istanbul");
geschaeftsstellen.add("Köln");
geschaeftsstellen.add("Aachen");
geschaeftsstellen.add("Berlin");
}*/
public List<String> getGeschaeftsstellen() {
geschaeftsstellen = new ArrayList<String>();
geschaeftsstellen.add("Dortmund");
System.out.println("TEEEEEEEEEEEST");
geschaeftsstellen.add("Essen");
geschaeftsstellen.add("Stralsund");
geschaeftsstellen.add("Stuttgart");
geschaeftsstellen.add("Zürich");
geschaeftsstellen.add("Istanbul");
geschaeftsstellen.add("Köln");
geschaeftsstellen.add("Aachen");
geschaeftsstellen.add("Berlin");
//ArrayList<String> a = new ArrayList<String>();
//a.add("Test");
return geschaeftsstellen;
}
public void setGeschaeftsstellen(List<String> geschaeftsstellen) {
this.geschaeftsstellen = geschaeftsstellen;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column
private String vorname;
@Column
private String nachname;
@Column
private String telefonnummer;
@Column
private String handynummer;
@Column
private String geschaeftsstelle;
@Column
@ElementCollection
private List<String> geschaeftsstellen;
我只是展示了其他变量,让您了解其中的内容。我知道列表的 @Column
注释不是必需的。但这对我来说是个问题。这样的数据是否应该在数据库中?我再也不会在其他地方使用它了。为这些选择按钮插入列表数据的正确方法是什么?当我只是取消注释 PostConstruct 时,它不会被调用。
当我添加 @ManagedBean
时出现错误:DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled.
但是在我的 .xhtml 中我已经有了 selection="#{telefonbuchList.selectedEntry}" selectionMode="single" rowKey="#{telefonbuch.id}"
我怎么知道哪个导入是正确的? javax.annotation 还是 javax.faces.bean?只需使用注释即可调用它。
这里可以看到我用的地方。它是新条目的选项卡 "Neuer Eintrag"。选项卡 "Telefonbuch" 是包含所有实体的 table 的列表。
编辑:
TelefonbuchListController 请求:
@Scope (value = "session")
@Component (value = "telefonbuchList")
@ELBeanName(value = "telefonbuchList")
@Join(path = "/", to = "/eintraege-liste.jsf")
public class TelefonbuchListController {
@Autowired
private TelefonbuchRepository telefonbuchRepository;
private List<Telefonbuch> eintraege;
@Deferred
@RequestAction
@IgnorePostback
public void loadData() {
eintraege = telefonbuchRepository.findAll();
}
public List<Telefonbuch> getEintraege() {
return eintraege;
}
private Telefonbuch selectedEntry;
public Telefonbuch getSelectedEntry() {
return selectedEntry;
}
public void setSelectedEntry(Telefonbuch selectedEntry) {
this.selectedEntry = selectedEntry;
}
public void deleteEntry() {
telefonbuchRepository.delete(selectedEntry);
eintraege.remove(selectedEntry);
selectedEntry = null;
}
我收到你的问题,你要求一个列表,其中包含可用于 selectOneRadio 组件的选项 - 以及为什么 @PostConstruct
不起作用。 @PostConstruct
被 JPA 或其他持久性框架忽略 - 据我所知,它可用于 CDI/Managed bean。
将其移至您的 TelefonbuchList
bean:
public class TelefonbuchListController {
@PostConstruct
public void init() {
geschaeftsstellen = new ArrayList<String>();
geschaeftsstellen.add("Dortmund");
geschaeftsstellen.add("Essen");
...
}
public List<String> getGeschaeftsstellen() {
return geschaeftsstellen;
}
}
您可以使用此列表来填充您的 selectOneRadio 组件 select 项。
直到现在,我在 getter 上添加了我想要的东西,这没有任何意义,并且在添加新条目时最终导致数据库混乱。
我目前的模型:
@Data
@Entity
public class Telefonbuch {
/*@PostConstruct
public void init() {
//geschaeftsstellen = new ArrayList<String>();
geschaeftsstellen.add("Dortmund");
System.out.println("TEEEEEEEEEEEST");
geschaeftsstellen.add("Essen");
geschaeftsstellen.add("Stralsund");
geschaeftsstellen.add("Stuttgart");
geschaeftsstellen.add("Zürich");
geschaeftsstellen.add("Istanbul");
geschaeftsstellen.add("Köln");
geschaeftsstellen.add("Aachen");
geschaeftsstellen.add("Berlin");
}*/
public List<String> getGeschaeftsstellen() {
geschaeftsstellen = new ArrayList<String>();
geschaeftsstellen.add("Dortmund");
System.out.println("TEEEEEEEEEEEST");
geschaeftsstellen.add("Essen");
geschaeftsstellen.add("Stralsund");
geschaeftsstellen.add("Stuttgart");
geschaeftsstellen.add("Zürich");
geschaeftsstellen.add("Istanbul");
geschaeftsstellen.add("Köln");
geschaeftsstellen.add("Aachen");
geschaeftsstellen.add("Berlin");
//ArrayList<String> a = new ArrayList<String>();
//a.add("Test");
return geschaeftsstellen;
}
public void setGeschaeftsstellen(List<String> geschaeftsstellen) {
this.geschaeftsstellen = geschaeftsstellen;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column
private String vorname;
@Column
private String nachname;
@Column
private String telefonnummer;
@Column
private String handynummer;
@Column
private String geschaeftsstelle;
@Column
@ElementCollection
private List<String> geschaeftsstellen;
我只是展示了其他变量,让您了解其中的内容。我知道列表的 @Column
注释不是必需的。但这对我来说是个问题。这样的数据是否应该在数据库中?我再也不会在其他地方使用它了。为这些选择按钮插入列表数据的正确方法是什么?当我只是取消注释 PostConstruct 时,它不会被调用。
当我添加 @ManagedBean
时出现错误:DataModel must implement org.primefaces.model.SelectableDataModel when selection is enabled.
但是在我的 .xhtml 中我已经有了 selection="#{telefonbuchList.selectedEntry}" selectionMode="single" rowKey="#{telefonbuch.id}"
我怎么知道哪个导入是正确的? javax.annotation 还是 javax.faces.bean?只需使用注释即可调用它。
这里可以看到我用的地方。它是新条目的选项卡 "Neuer Eintrag"。选项卡 "Telefonbuch" 是包含所有实体的 table 的列表。
编辑: TelefonbuchListController 请求:
@Scope (value = "session")
@Component (value = "telefonbuchList")
@ELBeanName(value = "telefonbuchList")
@Join(path = "/", to = "/eintraege-liste.jsf")
public class TelefonbuchListController {
@Autowired
private TelefonbuchRepository telefonbuchRepository;
private List<Telefonbuch> eintraege;
@Deferred
@RequestAction
@IgnorePostback
public void loadData() {
eintraege = telefonbuchRepository.findAll();
}
public List<Telefonbuch> getEintraege() {
return eintraege;
}
private Telefonbuch selectedEntry;
public Telefonbuch getSelectedEntry() {
return selectedEntry;
}
public void setSelectedEntry(Telefonbuch selectedEntry) {
this.selectedEntry = selectedEntry;
}
public void deleteEntry() {
telefonbuchRepository.delete(selectedEntry);
eintraege.remove(selectedEntry);
selectedEntry = null;
}
我收到你的问题,你要求一个列表,其中包含可用于 selectOneRadio 组件的选项 - 以及为什么 @PostConstruct
不起作用。 @PostConstruct
被 JPA 或其他持久性框架忽略 - 据我所知,它可用于 CDI/Managed bean。
将其移至您的 TelefonbuchList
bean:
public class TelefonbuchListController {
@PostConstruct
public void init() {
geschaeftsstellen = new ArrayList<String>();
geschaeftsstellen.add("Dortmund");
geschaeftsstellen.add("Essen");
...
}
public List<String> getGeschaeftsstellen() {
return geschaeftsstellen;
}
}
您可以使用此列表来填充您的 selectOneRadio 组件 select 项。