Value d'un InputText incorrect dans un repeat
Bonjour,
Dans le cadre d'un projet nous devons développer un site de ventes aux enchères basé sur la plateforme JEE.
L'idée est que pour chaque enchère nous souhaitons mettre à disposition un champs afin que les clients puissent rentrer un prix pour surenchérir, et valider leurs surenchères via un simple bouton.
Le problème qui se pose à nous est que notre attribut contenant la nouvelle proposition de prix ne se met à jour, que lorsque nous remplissons le champs de la dernière enchère affichée. Cela implique que nous ne pouvons pas surenchérir sur les enchères précédentes, l'attribut "prop" reste à 0.0.
Nous avons remarqué autre chose, une fois que nous avons misé sur la dernière enchère; nous avons remarqué que nous pouvions miser sur les premières enchères affichées, cependant le montant contenu dans prop ne peut-être changé. Ce qui signifie que si l'on mise 50 € sur la dernière enchère, on doit miser 50 € sur les autres enchères. Pas très pratique comme système d'enchères ...
Voici le code de la page JSF :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| <?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Service Client</title>
</h:head>
<h:body>
<ui:repeat value="#{achatEnchereCtrl.activeEncheres}" var="e">
<div class="prod">
<div class="prodimg">
<a href="#">
<img src="resources/images/prod1.jpg" alt="" border="0" height="150" width="150" />
</a>
</div>
<div class="txt">
<p>
<a href="#">#{e.produitEnchere.nom}</a><br />
<br />
<a href="#" class="info">
#{e.produitEnchere.description}
</a>
</p>
</div>
<div class="price">
<p> #{e.prixMiseAuxEncheres}</p>
<h:graphicImage id="image2" url="/resources/images/Encours.png" />
</div>
<div class="action">
<ul>
<p>Client Détenteur : #{e.clientEnchere.nom} #{e.clientEnchere.prenom}</p>
<p>Quantité : #{e.quantiteProduitsEnchere}</p>
<p>Date de Fin : #{e.dateFormatee}</p>
<h:form>
<h:inputText value="#{achatEnchereCtrl.propo}" id="nouveauPrix" required="true" requiredMessage="Nouvelle Enchère"/>
<h:commandButton value="Ajouter Enchère" action="#{achatEnchereCtrl.encherir()}">
<f:param name="enchereId" value="#{e.id}"/>
</h:commandButton>
</h:form>
</ul>
</div>
<hr/>
<br/>
</div>
</ui:repeat>
</h:body>
</html> |
Ainsi que le code du Managed Bean, je ne vous glisse pas les getters/setters mais sachez qu'ils sont bien présents.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| @ManagedBean(name = "achatEnchereCtrl")
@SessionScoped
public class AchatEnchereCtrl {
@EJB
private EnchereFacadeLocal EFL;
@EJB
private ProduitFacadeLocal PFL;
@EJB
private ClientFacadeLocal CFL;
private Client client;
private Enchere ench = new Enchere();
private float propo;
public AchatEnchereCtrl() {
}
protected Long getParamId(String param) {
Long result = Long.valueOf(getParam(param));
return result;
}
protected String getParam(String param) {
FacesContext context = FacesContext.getCurrentInstance();
Map<String, String> map = context.getExternalContext().getRequestParameterMap();
String result = map.get(param);
return result;
}
public String encherir() {
ench = EFL.find(getParamId("enchereId"));
if (this.getPropo() > ench.getPrixMiseAuxEncheres())
{
// Proposition supérieure au prix actuel
client = getClient();
ench.setClientEnchere(client);
ench.setPrixMiseAuxEncheres(propo);
EFL.edit(ench);
}
return null;
} |
Hors la propriété reste à 0.0 sauf quand nous remplissons la dernière enchère.
Nous ne comprenons pas ce comportement, avez vous une idée pour résoudre ce problème ?
Merci par avance.