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 : 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>
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
@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.