f:setPropertyActionListener传递错误的值

时间:2011-11-01 14:36:53

标签: jsf

我面临的奇怪问题是我的setpropertyActionListener在搜索我的列表后传递了前一个Item的值而不是当前的值。

这是我的SSCCE:

<rich:dataTable cellpadding="0" cellspacing="0" border="0"
                    var="item" value="#{collaborateurBeans.list}"
                    style="text-align:center;" rows="15" width="100%"
                    styleClass="adminlist" rowClasses="row0,row1"
                    columnsWidth="10,10,10,10,,,20,170,,115"  reRender="ds" id="tableEntities">
                    <f:facet name="header">
                        <rich:columnGroup>
                            <rich:column colspan="10">
                                <h:outputText value="Collaborateur(s) found(s): #{collaborateurBeans.size}" />
                            </rich:column>
                            <rich:column breakBefore="true">
                                <h:selectBooleanCheckbox id="checkAll" styleClass="headerText"
                                    value="" onclick="checkAll()" />
                            </rich:column>
                            <rich:column>
                                <h:outputText styleClass="headerText" value="id" />
                            </rich:column>
                            <rich:column>
                                <h:outputText styleClass="headerText" value="Trig" />
                            </rich:column>
                            <rich:column>
                                <h:outputText styleClass="headerText" value="DAS" />
                            </rich:column>
                            <rich:column>
                                <h:outputText styleClass="headerText" value="Prenom" />
                            </rich:column>
                            <rich:column>
                                <h:outputText styleClass="headerText" value="Nom" />
                            </rich:column>
                            <rich:column>
                                <h:outputText styleClass="headerText" value="Ligne de Service" />
                            </rich:column>              
                            <rich:column>
                                <h:outputText styleClass="headerText" value="E-mail" />
                            </rich:column>          
                            <rich:column>
                                <h:outputText styleClass="headerText" value="Statut" />
                            </rich:column>      
                            <rich:column>
                                <h:outputText styleClass="headerText" value="Action" />
                            </rich:column>
                        </rich:columnGroup>
                    </f:facet>
                    <rich:column>
                        <h:selectBooleanCheckbox value="#{item.checked}"
                            onclick="isChecked(this.checked)">
                        </h:selectBooleanCheckbox>
                    </rich:column>
                    <rich:column sortBy="#{item.iidcollaborateur}" sortOrder="DESCENDING"
                        style="text-align:center">
                        <h:outputText value="#{item.iidcollaborateur}" />
                    </rich:column>
                    <rich:column filterBy="#{item.strTrigrammeCollaborateur}" filterEvent="onkeyup"
                        style="padding-left:10px">
                        <h:outputText value="#{item.strTrigrammeCollaborateur}" />
                    </rich:column>
                    <rich:column filterBy="#{item.strDascollaborateur}" filterEvent="onkeyup"
                        style="padding-left:10px">
                        <h:outputText value="#{item.strDascollaborateur}" />
                    </rich:column>
                    <rich:column filterBy="#{item.strPrenomCollaborateur}" filterEvent="onkeyup"
                        style="padding-left:10px">
                        <h:outputText value="#{item.strPrenomCollaborateur}" />
                    </rich:column>
                    <rich:column filterBy="#{item.strNomCollaborateur}" filterEvent="onkeyup"
                        style="padding-left:10px">
                        <h:outputText value="#{item.strNomCollaborateur}" />
                    </rich:column>
                    <rich:column filterBy="#{item.rrLigneservice.strLigneService}" filterEvent="onkeyup"
                        style="padding-left:10px">
                        <h:outputText value="#{item.rrLigneservice.strLigneService}" />
                    </rich:column>
                    <rich:column filterBy="#{item.strEmailCollaborateur}" filterEvent="onkeyup"
                        style="padding-left:10px">
                        <h:outputText value="#{item.strEmailCollaborateur}" />
                    </rich:column>
                    <rich:column filterBy="#{item.rrStatutcollaborateur.strLibelleStatutCollaborateur}" filterEvent="onkeyup"
                        style="padding-left:10px">
                        <h:outputText value="#{item.rrStatutcollaborateur.strLibelleStatutCollaborateur}" style='width:100%;display:block;height:15px;
                background-color:#{item.rrStatutcollaborateur.strCouleur == "" ? "" 
                                    :item.rrStatutcollaborateur.strCouleur}'/>
                    </rich:column>
                    <rich:column style="text-align:center">

                    <a4j:commandLink id="tooltip">
                            <h:graphicImage value="../images/actions/tooltip.png"
                                style="border:0px;padding-right:5px" alt="view">
                            </h:graphicImage>
                        </a4j:commandLink>
                        <rich:toolTip for="tooltip" showDelay="300" direction="top-left"
                            styleClass="tooltip" layout="block">
                            <a4j:outputPanel layout="block">
                                <h:panelGrid columns="4">
                                    <f:facet name="header">
                                        <h:outputText value="Collaborateur Détails:" style="text-align:center;"/>
                                    </f:facet>

                                    <h:outputText value="Collaborateur :" />
                                    <h:outputText value="#{item.strNomCollaborateur} #{item.strPrenomCollaborateur}"
                                        styleClass="tooltipData" />
                                    <h:outputText value="DAS :" />
                                    <h:outputText value="#{item.strDascollaborateur}" 
                                        styleClass="tooltipData" />                                 
                                    <h:outputText value="Date Naissnace : " styleClass="tooltipData" />
                                    <h:outputText value="#{item.dtDateNaissanceCollaborateur}" styleClass="tooltipData" >
                                        <f:convertDateTime pattern="dd/MM/yyyy" type="date" timeZone="Europe/Paris"/>
                                    </h:outputText>
                                    <h:outputText value="Adresse :" />
                                    <h:outputText value="#{item.strAdresseCollaborateur}" 
                                        styleClass="tooltipData" />
                                    <h:outputText value="Email :" />
                                    <h:outputText value="#{item.strEmailCollaborateur}" 
                                        styleClass="tooltipData" />
                                    <h:outputText value="Télephone :" />
                                    <h:outputText value="#{item.strTelephoneProfessionelCollaborateur}" 
                                        styleClass="tooltipData" />
                                    <h:outputText value="Etage :" />
                                    <h:outputText value="#{item.strEtageCollaborateur}" 
                                        styleClass="tooltipData" />
                                        <h:outputText value="Bureau :" />
                                    <h:outputText value="#{item.strBureauCollaborateur}" 
                                        styleClass="tooltipData" />
                                    <h:outputText value="Ligne de Service :" />
                                    <h:outputText value="#{item.rrLigneservice.strLigneService}" 
                                        styleClass="tooltipData" /> 
                                    <h:outputText value="Responsable :" />
                                    <h:outputText value="#{item.rrCollaborateur.strNomCollaborateur} #{item.rrCollaborateur.strPrenomCollaborateur}" 
                                        styleClass="tooltipData" />     
                                    <h:outputText value="Date D'Arrivé prévue :" />
                                    <h:outputText value="#{item.dtDateArriveePrevueCollaborateur}"
                                        styleClass="tooltipData" >
                                        <f:convertDateTime pattern="dd/MM/yyyy" type="date" timeZone="Europe/Paris"/>
                                    </h:outputText>
                                    <h:outputText value="Date De Sortie Prévue :" />
                                    <h:outputText value="#{item.dtDateSortiePrevueCollaborateur}"
                                        styleClass="tooltipData">
                                        <f:convertDateTime pattern="dd/MM/yyyy" type="date" timeZone="Europe/Paris"/>
                                    </h:outputText>
                                    <h:outputText value="Date D'Arrivé Réelle :" />
                                    <h:outputText value="#{item.dtDateArriveReelleCollaborateur}"
                                        styleClass="tooltipData">
                                        <f:convertDateTime pattern="dd/MM/yyyy" type="date" timeZone="Europe/Paris"/>
                                    </h:outputText>
                                    <h:outputText value="Date De Sortie Réelle :" />
                                    <h:outputText value="#{item.dtDateSortieReelleCollaborateur}"
                                        styleClass="tooltipData">
                                        <f:convertDateTime pattern="dd/MM/yyyy" type="date" timeZone="Europe/Paris"/>
                                    </h:outputText>
                                    <h:outputText value="Niveau :" />
                                    <h:outputText value="#{item.rrNiveau.strLibelleNiveau}"
                                        styleClass="tooltipData" />
                                    <h:outputText value="Code D'Emploi :" />
                                    <h:outputText value="#{item.rrCodeemploi.strLibelleCodeEmploi}"
                                        styleClass="tooltipData" />     

                                    <h:outputText value="Fonction :" />
                                    <h:outputText value="#{item.rrFonction.strTitreFonction}"
                                        styleClass="tooltipData" />
                                    <h:outputText value="Statut :" />
                                    <h:outputText value="#{item.rrStatutcollaborateur.strLibelleStatutCollaborateur}"
                                        styleClass="tooltipData" />


                                </h:panelGrid>
                            </a4j:outputPanel>
                        </rich:toolTip>
                        <h:commandLink action="#{collaborateurBeans.redirectEdit}" title="editer"
                            onclick="blur();">
                            <h:graphicImage value="../images/actions/edit.png"
                                style="border:0px;padding-right:5px" alt="Edit" />
                            <f:setPropertyActionListener value="#{item}"
                                target="#{suiviBridgeBean.collaborateur}" />
                            <f:setPropertyActionListener value="#{item}"
                                target="#{collaborateurBeans.currentItem}"/>
                        </h:commandLink>
                        <h:commandLink action="#{collaborateurBeans.redirectSuivi}" title="ajouter suivi"
                            onclick="blur();">
                            <h:graphicImage value="../images/actions/suivi.png"
                                style="border:0px;padding-right:5px" alt="Suivi"/>
                            <f:setPropertyActionListener value="#{item}"
                                target="#{suiviBridgeBean.collaborateur}" />
                        </h:commandLink>
                        <h:commandLink action="#{collaborateurBeans.redirectDetail}"
                                    title="Détail des affectations" onclick="blur();">
                                    <h:graphicImage value="../images/actions/detailed.png"
                                        style="border:0;padding-right:5px" alt="Détail" />
                                    <f:setPropertyActionListener value="#{item}"
                                        target="#{benchBridgeBean.rrCollaborateur}" />
                        </h:commandLink>
                        <h:commandLink action="#{collaborateurBeans.deleteItem}" title="supprimer"
                            onclick="blur();if(!confirm('voulez-vous supprimer le collaborateur selectionné ?')) return false;">
                            <h:graphicImage value="../images/actions/delete.png"
                                style="border:0" alt="Delete" />
                            <f:setPropertyActionListener value="#{item}"
                                target="#{collaborateurBeans.currentItem}" />
                        </h:commandLink>
                    </rich:column>
                    <f:facet name="footer">
                        <rich:datascroller id="ds" renderIfSinglePage="false" maxPages="10" page="1"
                        onclick="ajaxStart()" oncomplete="ajaxStop()" ajaxSingle="true"></rich:datascroller>
                    </f:facet>
                </rich:dataTable>

我的支持bean:

public class CollaborateurBeans extends MsgBox {

        private CollaborateurManager collaborateurManager;// contrat de service
    private List<RrCollaborateur> list;// Liste des collaborateurs utilisé meme
                                        // dans la recherche
    private List<RrCollaborateur> listAll;// affiche tout les collaborateurs

    private NiveauCodeEmploiManager niveauCodeEmploiManager;// contrat de
    // service
    private List<RrNiveaucodeemploi> listNiveau;// List niveau correspondant à
                                                // un code emloi

    private RrCollaborateur currentItem;// Ligne selectionnées

    // ** Attribut de recherche **//
    private RrCollaborateur collaborateurSearch;// info sur collaborateur
    private Date dtArriveeReelleLo;
    private Date dtArriveeReelleHi;
    private Date dtSortieReelleLo;
    private Date dtSortieReelleHi;
    // ** **//

    private Integer idResponsable = 0;// Id du responsable du collaborateur

        public CollaborateurBeans() {
        collaborateurManager = (CollaborateurManager) ApplicationContext
                .getApplicationContext().getBean("collaborateurManager");
        niveauCodeEmploiManager = (NiveauCodeEmploiManager) ApplicationContext
                .getApplicationContext().getBean("niveauCodeEmploiManager");
        currentItem = new RrCollaborateur();
        collaborateurSearch = new RrCollaborateur();
        // initialisation des messages
        super.msgError = null;
        super.msgSuccess = null;

    }


        public String redirectEdit() {
        if (currentItem.getRrCollaborateur() != null)
            idResponsable = currentItem.getRrCollaborateur()
                    .getIidcollaborateur();
        return "success";
    }

}

问题发生在这一行

<f:setPropertyActionListener value="#{item}"
                                    target="#{collaborateurBeans.currentItem}"/>
                            </h:commandLink>

该项目是数据表中的当前项目,当我尝试编辑时一切正常 一行,但是当我搜索并检索另一个大小更有限的列表时,setProperty动作侦听器会传递上一个列表中的项目,我真的不知道是怎么回事,因为

<h:outputText value="#{item.iidcollaborateur}" styleClass="tooltipData" />

显示正确的ID。

即使在重新呈现我的dataTable之后,它仍然会传递上一个列表结果的id。 我真的不明白。 我的backBean的范围是“请求”。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

根据评论:

  

getList()从另一个服务中检索List

所以,

public List<RrCollaborateur> getList() {
    return someService.list();
}

这不正确。你不应该在getter方法中做任何业务工作。您只需要在bean(post)构造函数或任何动作事件方法中加载和分配该列表。

private List<RrCollaborateur> list;

public CollaborateurBeans() {
    list = someService.list();
}

public void someUpdateAction() {
    someService.update(someItem);
    list = someService.list();
}

public List<RrCollaborateur> getList() {
    return list;
}

另见: