Предотвращение множественного вызова геттера в управляемом компоненте сеанса? - PullRequest
1 голос
/ 02 августа 2010

Я использую jsf 2.0.2 + richfaces 3.3.3. что я могу сделать, чтобы мой геттер не вызывался несколько раз ??

У меня есть это:

@ManagedBean(name = "mybean")
@SessionScoped
public class mybean implements Serializable {        
public MyClass getMyClass() {
        if (FacesContext.getCurrentInstance().getRenderResponse()) {
            myClass = get_it_from_database();
        }
        return myClass;
    }

Я также использовал это:

@ManagedBean(name = "mybean")
@SessionScoped
public class mybean implements Serializable {        
public MyClass getMyClass() {
        if (myClass = null) {
            myClass = get_it_from_database();
        }
        return myClass;
    }

но я хотел "обновить" ОДНАЖДЫ мои данные всякий раз, когда я обновляю страницу ...

Ответы [ 2 ]

3 голосов
/ 06 августа 2010

Вы не можете предотвратить это.Это природа добытчика.Метод получения предназначен для возврата данных (читай: для предоставления точки доступа извне), а не для загрузки данных.Там вы обычно используете конструктор bean-компонента, @PostConstruct или метод действия для.

Чтобы решить вашу конкретную проблему, переопределите bean-компонент для определения области запроса и переместите строку myClass = get_it_from_database(); в конструктор bean-компонента или @PostConstructметод, если он внедрил зависимости.Или, если вы действительно настаиваете на том, чтобы поддерживать его в рамках сеанса (вам следует предпочесть иметь два компонента: один сеанс в области данных сеанса и один запрос в области данных запроса), тогда ваш первый подход является наиболее разумным.

См. Также:

0 голосов
/ 02 августа 2010

создайте свойство myclass с помощью getter setter и верните, чтобы при повторном обновлении оно сохранялось и использовало также нулевую проверку, как упоминалось в вопросе.Хорошего дня

...