Предположим пример. У меня есть следующий интерфейс:
public interface DataSource<T> {
Future<T> fetch();
}
Этот источник данных может выполнять асинхронную выборку данных. И у нас есть следующий тег для использования источника данных в JSP:
<html>
<d:fetch from="${orderDS}" var="orders">
<c:foreach in="${orders}" var="order">
<div class="order">
<c:out value="${order.title}" />
</div>
</c:foreach>
</d:fetch>
</html>
Итак, что я хочу? Я хочу, чтобы движок рендеринга JSP дважды вызывал мой пользовательский тег (в этом примере FetchTag). При первом вызове FetchTag выполнит вызов DataSource.fetch () и сохранит Future локально как поле объекта. При втором вызове FetchTag выполняет вызов Future.get () и будет заблокирован, пока данные не станут доступными.
Есть ли способ сделать такую вещь?