Поскольку боб является областью запроса, ее члены будут существовать только для срока службы одного запроса. Таким образом, данные будут извлекаться каждый раз, когда запрашивается страница.
Одна вещь, которую вы могли бы сделать, - иметь кешированные данные в другой области (например, сеанс или приложение).
<managed-bean>
<managed-bean-name>expensiveBean</managed-bean-name>
<managed-bean-class>lifetime.ExpensiveBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>requestBean</managed-bean-name>
<managed-bean-class>lifetime.RequestBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
<managed-property>
<property-name>cachedAsset</property-name>
<property-class>lifetime.ExpensiveBean</property-class>
<value>#{expensiveBean}</value>
</managed-property>
</managed-bean>
Пример кода:
public class RequestBean {
private ExpensiveBean cachedAsset;
public ExpensiveBean getCachedAsset() {
return cachedAsset;
}
public void setCachedAsset(ExpensiveBean cachedAsset) {
this.cachedAsset = cachedAsset;
}
}
Таким образом, вы можете легко ссылаться на данные из области действия запроса боба, сохраняя при этом артефакты запроса на уровне отдельно.
В некоторых фреймах добавлена поддержка области страниц, которая привязывает данные к времени жизни представления. Это может быть другой вариант, в зависимости от ваших потребностей.