Bonjour,
J'essaye de suivre un tutoriel pour me faire un peu la main avec certaines notions du développement Web en Java : http://wwwdi.supelec.fr/hardebolle/t...vaEE/index.php
Et j'en suis à le tout dernière étape (même si le tuto n'est pas encore complet). Mais j'aimerai beaucoup utiliser les même outils et bien comprendre.
Je suis arrivé donc à cette page du tuto : http://wwwdi.supelec.fr/hardebolle/t...JEE_43-jpa.php à l'étape 4.
Donc pour ceux qui veulent pas relire le tuto, c'est peut-être pas nécessaire, j'utilise les outils suivants : JSF, JSF Managed Beans, JPA, EJBs Entity et EJBs Session Stateless utilisés en façades, et j'arrive à l'étape où j'aimerai ajouter des éléments dans une table pré-existante de ma base de données via un formulaire.
Il s'agit ici d'un simple prototype de eMarket.
J'ai une page catalog.xhtml pour afficher mes produits, une page createProduct pour ajouter des produits au catalogue, et une classe CatalogManager pour gérer ces deux actions.
CatalogManager.java :
catalog.xhtml :
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104 package instructions; import entity.Product; import facade.ProductFacade; import java.io.*; import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; import javax.ejb.EJB; import javax.faces.bean.ApplicationScoped; import javax.faces.bean.ManagedBean; @ManagedBean @ApplicationScoped public class CatalogManager implements Serializable { private ArrayList<Product> list = null; private int id; private String name; private double price; @EJB private ProductFacade productfacade; /** * Getter&Setter for list * @return */ public ArrayList<Product> getList(){ return this.list; } public void setList(ArrayList<Product> value){ this.list = value; } /** * Getter&Setter for id,name,price * @return */ public int getProductId(){ return this.id; } public void setProductId(int value){ this.id = value; } public String getProductName(){ return this.name; } public void setProductName(String value){ this.name = value; } public double getProductPrice(){ return this.price; } public void setProductPrice(double value){ this.price = value; } /** * Getter&Setter for productfacade * @return */ public ProductFacade getProductFacade(){ return this.productfacade; } public void setProductFacade(ProductFacade value){ this.productfacade = value; } public CatalogManager(){ this.list = new ArrayList<Product>(); } public String createProduct(){ Product p2 = new Product(); p2.setId(this.id); p2.setName(this.name); p2.setPrice(this.price); productfacade.create(p2); return "toCatalog"; } @PostConstruct public void findProduct(){ int i = 0; List<Product> l = new ArrayList<Product>(); l = productfacade.findAll(); for(i = 0; i < l.size(); i++){ this.list.add(l.get(i)); } } }
createProduct.xhtml :
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 <ui:composition template="/template.xhtml" xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <ui:define name="content-to-include"> <f:view> <ul> <li> <h:form> <h:commandLink action="toIndex"> <h:outputText value="Retourner à l'accueil" /> </h:commandLink> </h:form> </li> </ul> <!-- Display products --> <h:dataTable value="#{catalogManager.list}" var="item"> <h:column> <h:outputText value="#{item.id}" /> </h:column> <h:column> <h:outputText value="#{item.name}" /> </h:column> <h:column> <h:outputText value="#{item.price}" /> </h:column> <h:column> <h:form id="AddCart"> <h:commandButton value="Ajouter au panier" action="#{shoppingCartManager.addToCart}"> <f:setPropertyActionListener value="#{item}" target="#{shoppingCartManager.prodToAdd}" /> </h:commandButton> </h:form> </h:column> </h:dataTable> </f:view> </ui:define> </ui:composition>
Mon problème est le suivant : Lorsque je remplis mon formulaire dans la page createProduct.xhtml, j'appelle la méthode createProduct() dans CatalogManager.java. Et je désire donc ajouter un produit dans ma table PRODUCT.
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 <ui:composition template="/template.xhtml" xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html" xmlns:f="http://java.sun.com/jsf/core"> <ui:define name="content-to-include"> <f:view> <ul> <li> <h:form> <h:commandLink action="toIndex"> <h:outputText value="Retourner à l'accueil" /> </h:commandLink> </h:form> <h:form> <!-- Champs formulaire référence produit --> <h:outputLabel id="label_id" for="id" value="Référence du produit : " /> <h:inputText id="saisie_id" value="#{catalogManager.productId}" /> <br /> <!-- Champs formulaire nom produit --> <h:outputLabel id="label_name" for="name" value="Nom du produit : " /> <h:inputText id="saisie_name" value="#{catalogManager.productName}" /> <br /> <!-- Champs formulaire prix produit --> <h:outputLabel id="label_price" for="price" value="Prix du produit : " /> <h:inputText id="saisie_price" value="#{catalogManager.productPrice}" /> <br /> <h:commandButton value="Valider" action="#{catalogManager.createProduct()}" /> </h:form> </li> </ul> </f:view> </ui:define> </ui:composition>
A la validation du formulaire j'obtiens l'erreur : javax.ejb.EJBException: Transaction aborted
Pour info j'ai utilisé deux méthodes : findAll() et create(), la première servant à lister les éléments de ma table, et l'autre ajouter un élément (ou créer). Ils sont contenus dans une classe abstraite générée automatiquement par NetBeans AbstractFacade. Je conclus que tout a été correctement configuré puisque j'ai pu listé des éléments pré-existants avec la méthode findAll() sans aucun problème. (voir : http://wwwdi.supelec.fr/hardebolle/t...JEE_43-jpa.php)
Je sais pas si tout est clair. C'est pour ça que j'ai envoyé les liens du tuto. Je ne sais pas non plus si cette méthode est conseillée. J'aimerai utiliser la méthode create() et comprendre l'erreur, mais si vous avez des méthodes alternatives, je veux bien.
Merci
Partager