Вопрос по transient, jsf-2, managed-bean, serialization – Управляемое свойство SessionScope внутри объекта ViewScoped - Transient?

6

У меня есть структура JSF Beans такого рода:

@ManagedBean
@ViewScoped
public class ViewBeany implements Serializable {

....
    @ManagedProperty(value='#{sessionBeany})
    transient private SessionBeany sessionBeany;
...

    public getSessionBeany() { ... };
    public setSessionBeany(SessionBeany sessionBeany) { ... };

}

Причина дляtransient заключается в том, что сессионный компонент имеет некоторые не сериализуемые члены и не может быть сделан сериализуемым.

Будет ли это работать?

Если нет, как я могу решить проблему невозможности сериализацииSesionBeany но нужно ли держать его как управляемое свойство в объекте видимости?

Спасибо!

Если ты'вы не так ограничены, вы также можете просто установить свойSTATE_SAVING_MODE вserver и избежать необходимости сериализации вашего представления для клиента в целом kolossus

Ваш Ответ

1   ответ
12

всеtransient поля пропущены. JSF не делаетt повторно внедрить управляемые свойства после десериализации, так что вы получите bean-объект области видимости без свойства bean-объекта области действия, которое вызовет только NPE.

В этой конкретной конструкции лучше всего ввести ленивую загрузку в получателе и получить сессионный компонент получателем вместо прямого доступа к полю.

private transient SessionBeany sessionBeany;

public SessionBeany getSessionBeany() { // Method can be private.
    if (sessionBeany == null) {
        FacesContext context = FacesContext.getCurrentInstance();
        sessionBeany = context.getApplication().evaluateExpressionGet(context, "#{sessionBeany}", SessionBeany.class);
    }

    return sessionBeany;
}
Благодарю. Я'Я просто удивлен, что JSF нене иметьобтекаемый» решение этой проблемы, как я полагаю,не так уж редко. Ben
Я уже задавался вопросом, не должно ли этот был состоящий EJB. EJB-компоненты внедряются как сериализуемые прокси, так что вы неНе нужно беспокоиться о сериализации. BalusC

Похожие вопросы