h:selectManyListbox selects a duplicate value
cristinacom Apr 29, 2008 11:10 AMHello.
I've searched on the net, but this bug is not often encountered.
The context is the following: the user must select a list of zone (areas), and populate a list of strazi (streets) with their corresponding streets.
<a:region id="zoneRegion">
<s:decorate id="zoneDecorate" template="/backend/layout/edit.xhtml" rendered="#{newApartamentInBloc.cerere}">
<ui:define name="label">Zona:</ui:define>
<h:selectManyListbox id="listaZone" value="#{apartamentInBlocCreate.listaZone}" size="6">
<s:selectItems value="#{apartamentInBlocCreate.getZone()}" var="zona" label="#{zona.nume}"/>
<s:convertEntity/>
<a:support id="zonaAjax" event="onblur" ajaxSingle="true" reRender="listaStrazi"/>
</h:selectManyListbox>
<a:status id="statusZona">
<f:facet name="start">
<h:graphicImage value="/img/spinner.gif"/>
</f:facet>
</a:status>
</s:decorate>
</a:region >The concerning parts of code from my bean ApartamentInBlocCreate
are:
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "APARTAMENTINBLOC_ZONE", joinColumns = @JoinColumn(name = "APARTAMENTINBLOC_ID"), inverseJoinColumns = @JoinColumn(name = "ZONA_ID"))
@OrderBy("nume asc")
@Fetch(FetchMode.SUBSELECT)
private List<Zona> listaZone = new ArrayList<Zona>();
public List<Zona> getListaZone(){
return listaZone;
}
public void setListaZone(List<Zona> listaZone){
this.listaZone = listaZone;
this.setStrazi(stradaDAO.fillStraziByZone(listaZone));
}and the code for the called method:
public List<Strada> fillStraziByZone(List<Zona> zone){
log.info("1 stradaDAO.fillStraziByZone");
log.info("2 zone size #0", zone.size());
String hql = "from com.brit.apit.realEstate.Strada as o where 1 = 1";
if (zone.size() >= 1) { // if at least one value was picked
hql += " and (";
for (Zona obj : zone) {
hql += "o.zona.id=" + obj.getId() + " or ";
}
hql = hql.substring(0, hql.length() - 4);// removing last " or "
hql += ") order by o.nume asc";
}
Query q = entityManager.createQuery(hql);
return (List<Strada>)q.getResultList();
}In fillStraziByZone the zone size is always doubled. If I've selected 3 zone, the log prints that the zone size is 6.
But when i persist the apartamentInBlocCreate bean, the size of the listaZone is correct: 3.
Perhaps it is a view problem?
Thank you.