Problème de compréhension classes d'actions
Bonjour, après de nombreux essais et relectures du livre de J Lafosse je commence à comprendre et à pouvoir mettre en oeuvre le framework struts 2 couplé à Hibernate 3. Malheureusement je trouve les exemples du bouquin incomplets et plutôt obscurs, je ne comprends pas le fonctionnement des classes d'action. Doit on, pour une entité, utiliser un javabean associé à une classe d'action ou peut on définir des méthodes d'action au sein des classes POJO ? J'ai aussi beaucoup de mal à intégrer le principe du passage de paramètres car j'utilisais beaucoup l'objet httprequest avec les servlets, avec struts je ne vois pas du tout comment fonctionnent les paramètres, doit on toujours utiliser request.getParameter() / session.setAttribute() et un requestdispatcher ?
Et enfin est il possible d'utiliser JSP 2.0 avec struts ? Je ne trouve pas comment instancier la taglib en xml.
Pourriez vous m'aider à éclaircir ces points ? Merci.
Pour le moment j'ai les fichiers suivants qui donnent les résultats attendus, est ce qu'il y a quelque chose à améliorer / simplifier ?
Courrier.java:
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 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 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
| package com.menehould.courrier.bean;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.HibernateException;
import com.menehould.courrier.util.HibernateUtil;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.struts2.ServletActionContext;
@SuppressWarnings("serial")
@Entity
public class Courrier extends ActionSupport
{
@Id
@GeneratedValue
private int id;
private String datetime;
private String expediteur;
private String objet;
private String destinataire;
private String transmetteur;
private int reponse;
public Courrier()
{
}
/* à venir
public String addCourrier() {}
public String editCourrier() {}
public String delCourrier() {}
*/
public String getList()
{
HttpServletRequest request = ServletActionContext.getRequest();
//HttpSession httpSession = request.getSession();
Transaction tx = null;
List<Courrier> colist = null;
Session session = HibernateUtil.getSession();
try
{
String hql = "from Courrier";
if(request.getParameter("order") != null && request.getParameter("type") != null)
{
hql += " order by " + request.getParameter("type") + " " + request.getParameter("order");
}
colist = session.createQuery(hql).list();
//httpSession.setAttribute("colist", colist);
return SUCCESS;
}
catch(Exception e)
{
e.printStackTrace();
return ERROR;
}
finally
{
session.close();
}
}
public int getId()
{
return this.id;
}
public void setId(int id)
{
this.id = id;
}
public String getDatetime()
{
return this.datetime;
}
public void setDatetime(String datetime)
{
this.datetime = datetime;
}
public String getExpediteur()
{
return this.expediteur;
}
public void setExpediteur(String expediteur)
{
this.expediteur = expediteur;
}
public String getObjet()
{
return this.objet;
}
public void setObjet(String objet)
{
this.objet = objet;
}
public String getDestinataire()
{
return this.destinataire;
}
public void setDestinataire(String destinataire)
{
this.destinataire = destinataire;
}
public String getTransmetteur()
{
return this.transmetteur;
}
public void setTransmetteur(String transmetteur)
{
this.transmetteur = transmetteur;
}
public int getReponse()
{
return this.reponse;
}
public void setReponse(int reponse)
{
this.reponse = reponse;
}
}
} |
Struts.xml :
Code:
1 2 3 4
| <action name="list" class="com.menehould.courrier.bean.Courrier" method="getList">
<result>liste_courriers.jsp</result>
<result name="error">error.jsp</result>
</action> |
liste_courriers.jsp :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <% List<Courrier> colist = (List<Courrier>)session.getAttribute("colist");
if(colist != null)
{
for(Courrier co : colist)
{
%>
<form action="edit.action" method="post">
<tr>
<td class='std'><%=co.getId()%><input type="hidden" name="id" value="<%=co.getId()%>" /></td>
<td class='std'><input type="image" src="icones/mail_generic2.png" /></td>
<td class='std'><%=co.getDatetime()%></td>
<td class='std'><%=co.getExpediteur()%></td>
<td class='std'><%=co.getObjet()%></td>
<td class='std'><%=co.getDestinataire()%></td>
<td class='std'><%=co.getTransmetteur()%></td>
<td class='std'><a href="CourrierController?action=delete&id=<%=co.getId()%>"><img src="icones/supprimer_16.png" /></a></td>
</tr>
</form>
<%
}
}
%> |
Je trouve que le code de ma jsp est encore trop fastidieux et n'apporte aucun intérêt de plus qu'avec l'utilisation classique avec des servlets, est ce que struts permet de simplifier son écriture ? J'ai l'impression de réinventer la roue.