如何使用延迟加载,而不是将业务逻辑放在getter中

时间:2014-06-14 14:44:33

标签: jsf lazy-loading getter selectonemenu

我通过搜索了解到我不应该将业务逻辑放在吸气剂中,但我真的不知道如何解决它。我阅读了Why JSF calls getters multiple times并且我使用了但是我仍然没有得到我想要的结果。

<h:form id="form">
         <h:panelGrid columns="2" cellpadding="5">
           <h:outputText value="Nom personnel : " style="font-size: 18px" />
           <p:selectOneMenu value="#{personnelBean.nom}"  >
        <f:selectItem itemValue="#{null}" itemLabel="--Séléctionner Nom" />
        <f:selectItems value="#{personnelBean.listePersonnels}" var="personnel" 
                       itemValue="#{personnel.nom}" itemLabel="#{personnel.nom}" />
        <f:ajax listener="#{personnelBean.submit()}" render="display"/>
    </p:selectOneMenu>
       </h:panelGrid>
        <h:panelGrid columns="2" cellpadding="5">
           <h:outputText value="Prénom personnel : " style="font-size: 18px" />

           <p:selectOneMenu value="#{personnel1Bean.cin}" id="display" >
                <f:selectItem itemValue="#{null}" itemLabel="--Séléctionner Nom" />
        <f:selectItems value="#{personnel1Bean.listePersonnels}" var="personnel" 
                       itemValue="#{personnel.cin}" itemLabel="#{personnel.prenom}" />
        <f:ajax listener="#{personnel1Bean.submit()}" render="dis"/>
    </p:selectOneMenu>
       </h:panelGrid>
                   <h:outputText value="Nombre d'enfants : "/>
                   <h:outputText id="dis" value="#{personnel1Bean.nombreEnfants}" />
               </h:form>

Personnel1Bean.java

private Integer loadNombreEnfants() {

        String cin = submit();
        System.out.println("CIN" + cin);
        Personnel p = personnelMetier.getPersonnel(cin);
        nombreEnfants = p.getNombreEnfants();
        System.out.println(nombreEnfants);
        return nombreEnfants;
    }
public Integer getNombreEnfants() {
        return nombreEnfants;
    }
 public void ajaxListener(AjaxBehaviorEvent event) {

        nombreEnfants = loadNombreEnfants();
    }

0 个答案:

没有答案