2013-10-14 82 views
0

我只想在某些条件下打印结果数组。 在我的bean中,我有一个方法dataIsOk(),它检查条件并使用表单中的数据进行计算。计算费用昂贵(约5秒)。方法dataIsOk()被调用多次,然后总时间很长(大约20秒)。多次调用的方法

我是JSF的新手,我不知道如何缩短总时间(例如dataIsOk()只调用一次)。

我XHTML:

<p:outputPanel rendered="#{pBean.dataIsOk() eq true}"> 
    <ui:include src="result.xhtml"/> 
</p:outputPanel> 

我见过@PostContruct但我有一种感觉,它不会在我的情况好了,因为我的方法从接口需要的数据(再不能在bean的构建之前执行)。

我的功能:

public boolean dataIsOk() { 
    if (profilIsOk()) { 
     Date dateEffet = rechercheDate(); 
     Parametres param = rechercheParam(); 
     FacesContext fc = FacesContext.getCurrentInstance(); 
     EBean eBean = (EBean) fc.getViewRoot().getViewMap().get("eBean"); 
     if (eBean !=null) { 
      Calcul calcul = new Calcul(); 
      List<Tarif> tarifs = new ArrayList<Tarif>(); 
      tarifs = calcul.calculTarif(dateEffet, param, eBean.getType()); 
      return true; 
     } else return false; 
    } 
+0

什么是'pBean'的范围是什么? –

+0

@miroslav_mijajlovic得分视图 – Fabaud

+0

提供方法'dataIsOk' –

回答

0

你需要重新设计你的代码。 在您的托管bean创建一个简单的

private Boolean renderResult;

与它的getter和setter。使用@PostConstruct来初始化renderResult = false。通过ajax调用一个方法checkData后,它实际上会重新计算用户输入并更新renderResult的值。即

<p:selectOneMenu id="citytSelection" 
    value="#{pBean.selectedCity}"> 
    <f:selectItem itemLabel="Select your city..." itemValue="" /> 
    <f:selectItems value="#{pBean.cityList}" /> 
    <p:ajax listener="#{pBean.checkData}" update="yourOutputPanelId" /> 
</p:selectOneMenu> 

您的输出面板看起来像:

<p:outputPanel rendered="#{pBean.renderResult}" id="yourOutputPanelId"> 
    <ui:include src="result.xhtml"/> 
</p:outputPanel> 

你checkData:

public void checkData() { 
    this.renderResult = false; 
    if (profilIsOk()) { 
    Date dateEffet = rechercheDate(); 
    Parametres param = rechercheParam(); 
    FacesContext fc = FacesContext.getCurrentInstance(); 
    EBean eBean = (EBean) fc.getViewRoot().getViewMap().get("eBean"); 
    if (eBean !=null) { 
     Calcul calcul = new Calcul(); 
     List<Tarif> tarifs = new ArrayList<Tarif>(); 
     tarifs = calcul.calculTarif(dateEffet, param, eBean.getType()); 
     this.renderResult = true; 
    } 
    } 
} 
+0

Thx,它的工作原理! – Fabaud