По сути, у меня есть страница JSF с рядом компонентов, включая таблицу ADF, заполненную списком данных, возвращаемых методом getData() в моем классе управления данными. Над таблицей я пытаюсь отобразить некоторые расчетные значения из отображаемых данных, но значения полей отображаются неправильно.
(Я использую JDev 11.1.1.5)
Класс управления данными называется RecentDeals, а метод getData() возвращает список объектов сделок, который включает ряд полей (даты, значения, имена и т. д.).
Класс RecentDeals также содержит закрытые переменные для хранения расчетных (средних) значений, которые будут отображаться над таблицей (например, avgSize, avgTerm, avgRent и т. д.). В том же методе getData() после итерации по списку сделок для выполнения необходимых вычислений (и сохранения соответствующих значений по пути) переменные обновляются рассчитанными средними значениями перед возвратом объектов списка сделок, которые заполняют таблицу.
Ниже приведен фрагмент кода для справки:
public class RecentDealsDC {
private Double avgSize;
private Double avgTerm;
private Double avgRent;
...
public RecentDealsDC() {
super();
avgSize = 0.0;
avgTerm = 0.0;
avgRent = 0.0;
...
}
public List<DealDTO> getData(List<String> businessUnits){
List<TransactionDTO> transactions = new ArrayList<TransactionDTO>();
List<DealDTO> deals = new ArrayList<DealDTO>();
TransactionSessionBean transBean = lookupTransactionSessionBean();
Double size = 0.0;
Double term = 0.0;
Double totalBaseRent = 0.0;
...
Integer recordCount = 0;
if (businessUnits != null && !businessUnits.isEmpty()){
transactions = transBean.getDealsData(SystemUtil.getCurrentUser(), businessUnits);
recordCount = transactions.size();
if( recordCount > 0 ){
for (int i=0; i < recordCount; i++){
TransactionDTO transObj = new TransactionDTO();
DealDTO dealObj = new DealDTO();
transObj = transactions.get(i);
// process transaction, execute logic, store deal values
size = size + transObj.getRentableArea();
term = term + transObj.getLeaseTerm();
totalBaseRent = totalBaseRent + (transObj.getRentableArea() * transObj.getBaseRent());
...
deals.add(dealObj);
}
}
avgSize = size / recordCount;
avgTerm = term / recordCount;
avgRent = totalBaseRent / size;
...
}
return deals;
}
}
Когда я запускаю свою страницу JSF, она правильно отображает данные из объектов List of Deal, но вычисляемые поля просто отображают ноль. Когда пользователь выбирает следующие «критерии» для заполнения таблицы (из раскрывающегося списка в заголовке), вычисляемые поля затем обновляются предыдущими сохраненными значениями. Другими словами, поля заголовка показывают средние значения, относящиеся к предыдущему набору данных, и кажется, что цикл продолжается для каждого последующего выбора пользователя, поэтому пользователь вынужден выбирать другое значение, чтобы получить необходимые средние значения, что явно неприемлемо. .
Я подтвердил в режиме отладки, что вычисления выполняются правильно и правильные значения сохраняются в закрытых переменных перед возвратом списка.
Не уверен, что мне здесь не хватает, но я думаю, что мне нужно как-то «обновить» компоненты outputText, чтобы сразу отображать ожидаемые значения. Это то, что я исследую, но сейчас что-то теряюсь.
Любые предложения/направления/идеи будут действительно оценены.
РЕДАКТИРОВАТЬ: похоже, что поля outputText также обновляются, когда я сворачиваю и повторно расширяю панель PanelBox, в которой они содержатся. Поэтому мне интересно, есть ли способ вручную выполнить то же самое обновление...
Спасибо, Карим