До сих пор я добавляю то, что хочу, в свой список поверх геттера, что не имеет смысла и заканчивается беспорядком в моей базе данных при добавлении новой записи.
Моя модель до сих пор:
@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" для новой записи. Вкладка «Телефонбух» представляет собой список с таблицей для всех объектов.
Редактировать: 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;
}
@Selaron, вы имеете в виду, что я вставил в инициализацию это: List<String> geschaeftsstellen = new ArrayList<String>(); затем добавьте элементы, а затем Telefonbuch telefonbuch = new Telefonbuch(); а затем telefonbuch.setGeschaeftsstellen(geschaeftsstellen); Мне ничего не покажет. Я добавил TelefonbuchListController
Я получил ваш вопрос о том, что вы просите заполнить список параметрами, которые можно использовать с компонентом selectOneRadio, и почему @PostConstruct
не работает. @PostConstruct
игнорируется JPA или другими структурами персистентности - насколько мне известно, его можно использовать с CDI/управляемыми bean-компонентами.
Переместите его в свой bean-компонент 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.
Я не понял. Это был неправильный контроллер. Это будет только TelefonbuchController. Мои имена плохие. Но это работает. Большое тебе спасибо!
Класс
Telefonbuch
является классом сущности, сохраняемым через JPA или тому подобное.@PostConstruct
— это аннотация, используемая для методов инициализации управляемых компонентов (не классов сущностей). Переместитеinit()
в ваш bean-компонентtelefonbuchList
, для которого вы не предоставили исходный код. ВgetGeschaeftsstellen()
возвращается только список, подготовленный методом init().