Sous struts 2 + jpa+ spring --> afficher un article d'une liste d'articles grace

pokou03 Messages postés 4 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 17 juin 2010 - 17 juin 2010 à 13:12
pokou03 Messages postés 4 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 17 juin 2010 - 17 juin 2010 à 16:36
Bonjour,
je fais un wiki qui ressemble un peu à un CRUD sous Struts 2 + JPA/Hibernate + Spring.
Dans ma .JSP qui affiche la liste de mes articles, j'ai un bouton "afficher le détail de l'article" à coté de chaque article.
Dans ma méthode "afficher" de mon Action.java

Je réussi à afficher le 1er par :
article = articleModel.afficher(1);

mais je ne réussi pas à récupérer l' id d'un article quelconque de la liste :
quand j'écris ceci :
article = articleModel.afficher(id);
l'id contient null.

Pourriez vous me dire ce qui coince ?
est ce la persistene ?
merci d'avance

6 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 juin 2010 à 14:00
Salut,

Comment veux-tu qu'on te réponde avec si peu de détail ? Montres nous au moins ton code où tu définit la valeur de ta variable id (à première vue, tu ne le fait jamais vue le null pointer...) et le code où tu essaye de récupérer ton article.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
pokou03 Messages postés 4 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 17 juin 2010
17 juin 2010 à 14:43
merci pour ta demande de complément [^^happy13]

[size=200][color=red]Voici mon Action :/color/size
package act;
import java.util.*;

import org.apache.struts2.interceptor.SessionAware;
import org.hibernate.annotations.Index;
import org.hibernate.property.Getter;
import org.springframework.web.context.request.RequestAttributes;

import uti.ArticleModel;
import uti.IArtticleModel;
import uti.ICommentaireModel;
import uti.IUserModel;

import bea.*;

import com.opensymphony.xwork2.ActionSupport;

public class Action1 extends ActionSupport implements SessionAware
{
// les interfaces
private IArtticleModel articleModel;
private IUserModel userModel;
private ICommentaireModel commentaireModel;

// les variables
private String username;
private String password;

private String editorId;
private String value;

private Article article;
private List articles;
private Integer id;

private Map session;

private User currentUser;

// --------------------------------------------
public void setArticleModel(IArtticleModel articleModel)
{
this.articleModel = articleModel;
}
// --------------------------------------------
public void setUserModel(IUserModel userModel)
{
this.userModel = userModel;
}
// --------------------------------------------
public void setCommentaireModel(ICommentaireModel commentaireModel)
{
this.commentaireModel = commentaireModel;
}
// --------------------------------------------
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
// --------------------------------------------
public String getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
// --------------------------------------------
public String getEditorId()
{
return editorId;
}
public void setEditorId(String editorId)
{
this.editorId = editorId;
}
// --------------------------------------------
public String getValue()
{
return value;
}
public void setValue(String value)
{
this.value = value;
}
// --------------------------------------------
public Article getArticle()
{
return article;
}
// --------------------------------------------
public List getArticles()
{
return articles;
}
// --------------------------------------------
public void setSession(Map arg0)
{
session = arg0;
}
// --------------------------------------------
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
// --------------------------------------------
public User getCurrentUser()
{
return currentUser;
}
// --------------------------------------------
public String execute()
{
return "success";
}
// --------------------------------------------
public String lister()
{
if (session.containsKey("userid"))
{
currentUser = userModel.find((Integer)session.get("userid"));
}
if (currentUser == null)
return "error";

articles = articleModel.lister();

return "success";
}
// ------------------------------------------
public String afficher()
{
// preparer le passage du parametre id client

article = articleModel.afficher(1);

return "success";
}
// --------------------------------------------
public String creer()
{
// permet d'afficher le formulaire d'ajout
return "success";
}
// --------------------------------------------
// mapping objet vers relationnel
public String ajouter()
{
if (session.containsKey("userid"))
{
currentUser = userModel.find((Integer)session.get("userid"));
}
if (currentUser == null)
return "error";

// cree un article
Article a = new Article(article.getTitre(), article.getCorp());

// sauve l'article dans le model
articleModel.ajouter(article);

// ajoute l'article a ce user
currentUser.addArticle(article);

return "success";
}
// --------------------------------------------
public String editer()
{
// permet d'afficher le formulaire de modif
return "success";
}
// -------------------------------------------
public String modifier()
{
if (session.containsKey("userid"))
{
currentUser = userModel.find((Integer)session.get("userid"));

System.out.println("username"+ username);}
if (currentUser == null)
return "error";

// cree un article
// Article a = new Article(article.getTitre(), article.getCorp());

if (article != null)
{
// sauve l'article dans le model
articleModel.modifier(article);
}
return "success";
}
// -------------------------------------------
public String supprimer()
{

if (article != null)
{
// efface l'article du modele
articleModel.supprimer(article);

}
return "success";
}
// --------------------------------------------
public String aff_login()
{
return "success";
}
// --------------------------------------------
public String dologin()
{
// affiche le loggué
System.out.println(username);
System.out.println(password);

User u = userModel.login(username, password);

if (u == null)
{
session.remove("userid");
return "error";
}

session.put("userid", u.getId());
return lister();
}
}

[size=300][color=red]mon model /color:/size
package uti;
import java.util.List;

import javax.persistence.*;
import bea.*;

import org.springframework.transaction.annotation.*;

@Transactional
// on se situe a l'interieur d"une transaction
public class ArticleModel implements IArtticleModel
{
// les variables
private EntityManager entityManager;
// --------------------------------------
@PersistenceContext
public void setEntityManager(EntityManager entityManager)
{
this.entityManager = entityManager;
}
// ---------------------------------------
public List lister()
{
// ici du langage EJBQL
return (List)entityManager.createQuery("from Article").getResultList();
}
// ---------------------------------------
public Article afficher(int id)
{
return entityManager.find(Article.class, id);
}
// ---------------------------------------
public void ajouter(Article a)
{
// if (a.getId() != 0)
//// update
// entityManager.merge(a);
// else

// new
entityManager.persist(a);
}
// ---------------------------------------
public void modifier(Article a)
{
// if (a.getId() != 0)

// update
entityManager.merge(a);

// else
//// new
// entityManager.persist(a);
}
// ---------------------------------------
public void supprimer(Article a)
{
entityManager.remove(a);
}
}

[size=300][color=red]Mon bean Article /color:/sizepackage bea;
import java.io.Serializable;
import java.util.*;

import javax.persistence.*;

@Entity
public class Article implements Serializable
{
// les variables
private int id;
private String titre;
private String corp;
private Date creation;
private Set commentaires;
private User user;

// les constructeurs
public Article()
{
}

public Article(String titre, String corp)
{
setTitre(titre);
setCorp(corp);
setCreation(new Date());
}

// -------------------------------------
@Id @GeneratedValue(strategy=GenerationType.AUTO)
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
// ---------------------------------------
public String getTitre()
{
return titre;
}
public void setTitre(String titre)
{
this.titre = titre;
}
// ---------------------------------------
public String getCorp()
{
return corp;
}
public void setCorp(String corp)
{
this.corp = corp;
}
// --------------------------------------
@Temporal(TemporalType.DATE)
public Date getCreation()
{
return creation;
}
public void setCreation(Date creation)
{
this.creation = creation;
}
// ---------------------------------------
@OneToMany(cascade=CascadeType.ALL)
// un article peut avoir plusieurs commentaires
public Set getCommentaires()
{
return commentaires;
}
public void setCommentaires(Set commentaires)
{
this.commentaires = commentaires;
}
// ---------------------------------------
@ManyToOne(cascade=CascadeType.PERSIST)
// plusieurs articles peuvent etre du meme auteur
public User getUser()
{
return user;
}
public void setUser(User user)
{
this.user = user;
}

// les methodes appellees dans execute de action1
public void addCommentaire(Commentaire c)
{
if (commentaires == null)
commentaires = new HashSet();
commentaires.add(c);
}
}

[size=300][color=red]Mon fich de persistence :/color/size









[size=300][color=red]et ma liste d'articles .jsp :/color/size











Liste des articles



catalogue ete 2010



Bonjour !















Article n°


:





































commentaire no

le















liste des auteurs





[size=300][color=red]et mon application context :/color/size







































j'ai aussi un struts des validateurs ... mais je crois que mon problème tourne autour de la persistence de Article ou de ArticleModel ?

0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 juin 2010 à 14:48
Salut,

Euh, oui ok, mais là c'est trop détaillé du coup

Mets en évidence les quelques lignes qui posent problèmes (en les mettant en couleur par exemple), car là ca donne pas trop envie de lire tout le code.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
pokou03 Messages postés 4 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 17 juin 2010
17 juin 2010 à 15:52
Oui tu as raison :
dans l'action , j'appelle la methode afficher de mon model, mais avec l'index 1 en dur ( en violet ici), donc il m'affiche bien le premier de la liste :
...
public String afficher()
{
// preparer le passage du parametre id client

article = articleModel.afficher(1);

return "success";
}
...

je voudrais remplacer ce 1 par l'id de l'article listé à coté de mon bouton afficher de la jsp ,( en violet ici) :

<?xml version="1.0" encoding="ISO-8859-1" ?>
...
<s:iterator value="articles">
<table border="1">
<tr>
<td>Article n° <s:property value="id" /></td>
<td><s:property value="titre" />
</td>
<td><s:property value="creation" /> :
</td>
<td><s:property value="user.username" />
</td>
<tr/>
<tr>
<td colspan="4" ><s:property value="corp"/>
</td>
</tr>


<tr>
</td>
<td>
<td>
<s:form action="Afficher_Article" method="post" theme="simple"> <s:submit value="afficher" />
</s:form>
</td>
...

</html>

et dans mon modelArticle, je crée bien mon context de persistance, et j'affiche un article gràace à son id (en violet ici) :
...
@PersistenceContext
public void setEntityManager(EntityManager entityManager)
{
this.entityManager = entityManager;
}

// ---------------------------------------
public List lister()
{
// ici du langage EJBQL
return (List)entityManager.createQuery("from Article").getResultList();
}

// ---------------------------------------
public Article afficher(int id)
{
return entityManager.find(Article.class, id); }
...

ainsi je cherche le mecanisme qui me permettra dans l'Action de récupérer dans la value stack (ou grace à un getId ... mais lequel ?) l'id que je cherche.
peut etre que je me situe dans la mauvaise couche : au lieu d'etre dans la couche request, je suis encore dans la couche session ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
17 juin 2010 à 16:12
Salut,

C'est à partir de ta requête HTTP (envoyée par ta jsp) que tu dois spécifier l'id à afficher : tu le récupère au niveau de ton action, et tu l'envoie à ta couche modèle pour récupérer l'article correspondant.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
pokou03 Messages postés 4 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 17 juin 2010
17 juin 2010 à 16:36
merci
affaire à suivre
0
Rejoignez-nous