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 :
Ainsi que le code du Managed Bean, je ne vous glisse pas les getters/setters mais sachez qu'ils sont bien présents.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
Hors la propriété
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }reste à 0.0 sauf quand nous remplissons la dernière enchère.
Code : Sélectionner tout - Visualiser dans une fenêtre à part this.getPropo()
Nous ne comprenons pas ce comportement, avez vous une idée pour résoudre ce problème ?
Merci par avance.
Partager