Получатели компонента только для доступа к данным модели со стороны вида. Их можно вызывать несколько раз. Обычно один или два раза, но это может возрасти в сотни раз, особенно когда оно также используется в UIData
компонентах или в других атрибутах, отличных от value
(например, rendered
, disabled
и т. Д.). Обычно это не наносит вреда, так как это простой вызов метода и выполнение дорогостоящей логики загрузки данных или вычислений, как правило, не выполняется в методах получения. Предварительная загрузка / инициализация обычно выполняется в конструкторе компонентов и / или в методах действия компонента. Фактически, получатели должны только возвращать данные (при необходимости также выполнять отложенная загрузка ).
Если getApplication().getKunden(getNameFilterPattern());
выполняет довольно дорогое задание, вам действительно следует переместить его либо в конструктор компонента, либо в метод @PostConstruct
компонента, либо в блок инициализации компонента, либо в метод действия компонента, либо ввести отложенную загрузку шаблон в геттере. Вот пример, который показывает, как сделать все это:
public class Bean {
private String nameFilterPattern;
private List<Kunde> kunden;
// Load during bean construction.
public Bean() {
this.kunden = getApplication().getKunden(getNameFilterPattern());
}
// OR load during @PostConstruct (will be invoked AFTER construction and resource injection.
@PostConstruct
public void init() {
this.kunden = getApplication().getKunden(getNameFilterPattern());
}
// OR during bean initialization (this is invoked BEFORE construction and will apply to ALL constructors).
{
this.kunden = getApplication().getKunden(getNameFilterPattern());
}
// OR during bean action method (invoked from h:commandLink/Button).
public String submit() {
this.kunden = getApplication().getKunden(getNameFilterPattern());
return "navigationCaseOutcome";
}
// OR using lazy loading pattern in getter method.
public List<Kunde> getKunden() {
if (this.kunden == null)
this.kunden = getApplication().getKunden(getNameFilterPattern());
}
return this.kunden;
}
В вашем конкретном случае я думаю, что это @PostConstruct
(если nameFilterPattern
должен быть получен из параметра запроса GET
), или просто метод действия компонента (если nameFilterPattern
должен быть получен из POST
поле ввода формы).
Чтобы узнать больше о жизненном цикле JSF, вы можете найти эту полезную статью полезной.