我面临的奇怪问题是我的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的范围是“请求”。
有什么想法吗?
答案 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;
}