如何使用 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 项。