Вопрос
Я делаю проект, где я использую компоненты пользовательских интерфейсов JSF 2.0 и PREMTS.
Существует вкладка View Component с вкладками, «День», «Неделя» и «месяц». На всех вкладках я должен отображать гистограммы в каждом. Для того же, я получу три списка, используя следующие три метода. В следующем коде UpdateCounteCountHelper выбирает данные из базы данных. Итак, UpdateCountexelper принимает некоторое время для получения данных.
Это код для получения списков:
public List<UpdateCount> getDayUpdateCounts() {
if (projectFlag == true) {
if (displayFlag == 1) {
dayUpdateCounts = UpdateCountHelper.getProjectUpdates(1);
} else {
dayUpdateCounts = UpdateCountHelper.getProjectUpdates(name, 1);
}
} else {
dayUpdateCounts = UpdateCountHelper.getResourceUpdates(userName, 1);
}
return dayUpdateCounts;
}
public List<UpdateCount> getMonthUpdateCounts() {
if (projectFlag == true) {
if (displayFlag == 1) {
monthUpdateCounts = UpdateCountHelper.getProjectUpdates(30);
} else {
monthUpdateCounts = UpdateCountHelper.getProjectUpdates(name, 30);
}
} else {
monthUpdateCounts = UpdateCountHelper.getResourceUpdates(userName, 30);
}
return monthUpdateCounts;
}
public List<UpdateCount> getWeekUpdateCounts() {
if (projectFlag == true) {
if (displayFlag == 1) {
weekUpdateCounts = UpdateCountHelper.getProjectUpdates(7);
} else {
weekUpdateCounts = UpdateCountHelper.getProjectUpdates(name, 7);
}
} else {
weekUpdateCounts = UpdateCountHelper.getResourceUpdates(userName, 7);
}
return weekUpdateCounts;
}
Это код для пользовательского интерфейса гистограммы:
<p:panel id="Chart">
<p:tabView dynamic="false" cache="false">
<p:tab title="Day">
<p:panel id="chartDayPanel">
<center>
<h:outputText id="projectWiseDayText" rendered="#{systemUtilizationServiceBean.projectFlag}" value="Project Wise Day Update"/>
<p:columnChart id="projectWiseDayUpdateChart" rendered="#{systemUtilizationServiceBean.projectFlag}" value="#{systemUtilizationServiceBean.dayUpdateCounts}" var="dayWiseUpdate" xfield="#{dayWiseUpdate.name}" height="200px" width="640px">
<p:chartSeries label="Project Wise Current Day Update" value="#{dayWiseUpdate.noUpdates}"/>
</p:columnChart>
<h:outputText id="resourceWiseDayText" rendered="#{systemUtilizationServiceBean.resourceFlag}" value="Resource Wise Day Update"/>
<p:columnChart id="resourceWiseDayUpdateChart" rendered="#{systemUtilizationServiceBean.resourceFlag}" value="#{systemUtilizationServiceBean.dayUpdateCounts}" var="dayWiseResourceUpdate" xfield="#{dayWiseResourceUpdate.name}" height="200px" width="640px">
<p:chartSeries label="Resource Wise Current Day Update" value="#{dayWiseResourceUpdate.noUpdates}"/>
</p:columnChart>
</center>
</p:panel>
</p:tab>
<p:tab title="Week">
<p:panel id="chartWeekPanel">
<center>
<h:outputText id="projectWiseWeekText" rendered="#{systemUtilizationServiceBean.projectFlag}" value="Project Wise Week Update"/>
<p:columnChart id="projectWiseWeekUpdateChart" rendered="#{systemUtilizationServiceBean.projectFlag}" value="#{systemUtilizationServiceBean.weekUpdateCounts}" var="weekWiseUpdate" xfield="#{weekWiseUpdate.name}" height="200px" width="640px">
<p:chartSeries label="Project Wise Current Week Update" value="#{weekWiseUpdate.noUpdates}"/>
</p:columnChart>
<h:outputText id="resourceWiseWeekText" rendered="#{systemUtilizationServiceBean.resourceFlag}" value="Resource Wise Week Update"/>
<p:columnChart id="resourceWiseWeekUpdateChart" rendered="#{systemUtilizationServiceBean.resourceFlag}" value="#{systemUtilizationServiceBean.weekUpdateCounts}" var="weekWiseResourceUpdate" xfield="#{weekWiseResourceUpdate.name}" height="200px" width="640px">
<p:chartSeries label="Resource Wise Current Week Update" value="#{weekWiseResourceUpdate.noUpdates}"/>
</p:columnChart>
</center>
</p:panel>
</p:tab>
<p:tab title="Month">
<p:panel id="chartMonthPanel">
<center>
<h:outputText id="projectWiseMonthText" rendered="#{systemUtilizationServiceBean.projectFlag}" value="Project Wise Month Update"/>
<p:columnChart id="projectWiseMonthUpdateChart" rendered="#{systemUtilizationServiceBean.projectFlag}" value="#{systemUtilizationServiceBean.monthUpdateCounts}" var="monthWiseUpdate" xfield="#{monthWiseUpdate.name}" height="200px" width="640px">
<p:chartSeries label="Project Wise Current Month Update" value="#{monthWiseUpdate.noUpdates}"/>
</p:columnChart>
<h:outputText id="resourceWiseMonthText" rendered="#{systemUtilizationServiceBean.resourceFlag}" value="Resource Wise Month Update"/>
<p:columnChart id="resourceWiseMonthUpdateChart" rendered="#{systemUtilizationServiceBean.resourceFlag}" value="#{systemUtilizationServiceBean.monthUpdateCounts}" var="monthWiseResourceUpdate" xfield="#{monthWiseResourceUpdate.name}" height="200px" width="640px">
<p:chartSeries label="Resource Wise Current Month Update" value="#{monthWiseResourceUpdate.noUpdates}"/>
</p:columnChart>
</center>
</p:panel>
</p:tab>
</p:tabView>
</p:panel>
Теперь я должен отображать такие же данные на другом TabView с теми же вкладками, как упомянутые выше, и теперь я должен отображать в круговой диаграмме. Теперь в круговой диаграмме я использую одни и те же списки. Итак, он снова будет извлечь данные из базы данных и тратить время. Чтобы решить эту проблему, которую я создал три других списка и дали только ссылку на эти предыдущие списки. Итак, теперь не произойдет отсутствие базы данных.
Код для применения ссылки:
public List<UpdateCount> getPieDayUpdateCounts() {
pieDayUpdateCounts = dayUpdateCounts;
return pieDayUpdateCounts;
}
public List<UpdateCount> getPieMonthUpdateCounts() {
pieMonthUpdateCounts = monthUpdateCounts;
return pieMonthUpdateCounts;
}
public List<UpdateCount> getPieWeekUpdateCounts() {
pieWeekUpdateCounts = weekUpdateCounts;
return pieWeekUpdateCounts;
}
Но, вот здесь проблема возникновения проблемы состоит в том, что отображается только диаграмма которой включает вкладку, но остальные оставшиеся 2 вкладка не показывают никакой диаграммы.
Код для пользовательского интерфейса:
<p:tabView dynamic="false" cache="false">
<p:tab title="Day">
<center>
<p:panel id="pieChartDayPanel">
<h:outputText id="projectWiseDayPieChartText" rendered="#{systemUtilizationServiceBean.projectFlag}" value="Project Wise Day Update"/>
<p:pieChart id="projectWiseDayUpdatePieChart" rendered="#{systemUtilizationServiceBean.projectFlag}" value="#{systemUtilizationServiceBean.dayUpdateCounts}" var="dayWisePieUpdate" categoryField="#{dayWisePieUpdate.name}" dataField="#{dayWisePieUpdate.noUpdates}" height="200" width="200"/>
<h:outputText id="resourceWiseDayPieChartText" rendered="#{systemUtilizationServiceBean.resourceFlag}" value="Resource Wise Day Update"/>
<p:pieChart id="resourceWiseDayUpdatePieChart" rendered="#{systemUtilizationServiceBean.resourceFlag}" value="#{systemUtilizationServiceBean.dayUpdateCounts}" var="dayWiseResourcePieUpdate" categoryField="#{dayWiseResourcePieUpdate.name}" dataField="#{dayWiseResourcePieUpdate.noUpdates}" height="200" width="200"/>
</p:panel>
</center>
</p:tab>
<p:tab title="Week">
<center>
<p:panel id="pieChartWeekPanel">
<h:outputText id="projectWiseWeekPieChartText" rendered="#{systemUtilizationServiceBean.projectFlag}" value="Project Wise Week Update"/>
<p:pieChart id="projectWiseWeekUpdatePieChart" rendered="#{systemUtilizationServiceBean.projectFlag}" value="#{systemUtilizationServiceBean.weekUpdateCounts}" var="weekWisePieUpdate" categoryField="#{weekWisePieUpdate.name}" dataField="#{weekWisePieUpdate.noUpdates}" height="200" width="200"/>
<h:outputText id="resourceWiseWeekPieChartText" rendered="#{systemUtilizationServiceBean.resourceFlag}" value="Resource Wise Week Update"/>
<p:pieChart id="resourceWiseWeekUpdatePieChart" rendered="#{systemUtilizationServiceBean.resourceFlag}" value="#{systemUtilizationServiceBean.weekUpdateCounts}" var="weekWiseResourcePieUpdate" categoryField="#{weekWiseResourcePieUpdate.name}" dataField="#{weekWiseResourcePieUpdate.noUpdates}" height="200" width="200"/>
</p:panel>
</center>
</p:tab>
<p:tab title="Month">
<center>
<p:panel id="pieChartMonthPanel">
<h:outputText id="projectWiseMonthPieChartText" rendered="#{systemUtilizationServiceBean.projectFlag}" value="Project Wise Month Update"/>
<p:pieChart id="projectWiseMonthUpdatePieChart" rendered="#{systemUtilizationServiceBean.projectFlag}" value="#{systemUtilizationServiceBean.monthUpdateCounts}" var="monthWisePieUpdate" categoryField="#{monthWisePieUpdate.name}" dataField="#{monthWisePieUpdate.noUpdates}" height="200" width="200"/>
<h:outputText id="resourceWiseMonthPieChartText" rendered="#{systemUtilizationServiceBean.resourceFlag}" value="Resource Wise Month Update"/>
<p:pieChart id="resourceWiseMonthUpdatePieChart" rendered="#{systemUtilizationServiceBean.resourceFlag}" value="#{systemUtilizationServiceBean.monthUpdateCounts}" var="monthWiseResourcePieUpdate" categoryField="#{monthWiseResourcePieUpdate.name}" dataField="#{monthWiseResourcePieUpdate.noUpdates}" height="200" width="200"/>
</p:panel>
</center>
</p:tab>
</p:tabView>
Что должно быть причиной этого?
Решение
Вместо того, чтобы пытаться сохранить несколько копий вашего списка, используйте JSF Scopes для управления, когда / как часто они получают.
Область присваиванию BELDING BEAT, чтобы запросить планшету или ViewSCOPED, создайте метод, который вытесняет списки из базы данных (при использовании CDI, а затем аннотируют метод @postconstruct, в противном случае вызовете его с prerendervieventevent или в самом конструкторе). Теперь доступа к своим спискам через простые GetTers.