Как установить список для addEntry с PostConstruct - PullRequest
0 голосов
/ 21 января 2019

До сих пор я добавляю вещи, которые я хочу иметь в своем списке, к геттеру, что не имеет смысла, и заканчиваю путаницей в моей базе данных при добавлении новой записи.

Моя модель до сих пор:

@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?Просто с аннотацией он вызывается.

enter image description here

Здесь видно, где я его использую.Это вкладка «Neuer Eintrag» для нового пользователя.Вкладка «Telefonbuch» представляет собой список с таблицей для всех сущностей.

Редактировать: 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;
    }

1 Ответ

0 голосов
/ 21 января 2019

Я получил ваш вопрос, что вы запрашиваете заполнение List опциями, которые можно использовать с компонентом selectOneRadio, и почему @PostConstruct не работает. @PostConstruct игнорируется JPA или другими средами персистентности - насколько мне известно, его можно использовать с CDI / управляемыми компонентами.

Переместите его в TelefonbuchList боб:

public class TelefonbuchListController {
    @PostConstruct
    public void init() {
        geschaeftsstellen = new ArrayList<String>();
        geschaeftsstellen.add("Dortmund");
        geschaeftsstellen.add("Essen");
       ...
    }

    public List<String> getGeschaeftsstellen() {
        return geschaeftsstellen;
    }
}

Вы можете использовать этот список, чтобы заполнить ваши элементы selectOneRadio компонентами выбора.

...