如何使用Struts2和Hibernate删除和修改数据
问题描述:
我创建了一个jsp页面,通过hibernate框架和struts2显示我的mysql数据库中包含的医生列表(medecin,法语)。如何使用Struts2和Hibernate删除和修改数据
我有一个删除按钮supprimer
(法语),删除一个医生和一个按钮,modifier
,编辑医生的数据。
编辑按钮,modifier
,将采取选定的医生的所有数据(id,nom,prenom等..),并把它放在一个表格中,我可以更新它。
ListedesMedecins.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix="sb" uri="/struts-bootstrap-tags"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Listes des Medecins</title>
</head>
<body>
<jsp:include page="accueil.jsp"/>
<h1>Listes des Medecins</h1>
<s:if test="Medecin.size() > 0">
<table border="1px" cellpadding="8px">
<tr>
<th>id</th>
<th>Nom</th>
<th>Prenom</th>
<th>contact</th>
<th>specialite</th>
</tr>
<s:iterator value="Medecin">
<tr>
<td><s:property value="idmed" /></td>
<td><s:property value="nom" /></td>
<td><s:property value="prenom" /></td>
<td><s:property value="contact" /></td>
<td><s:property value="specialite"/></td>
<td><a href="<s:url action="Modmed" namespace="/Modmed"/>"> Modifier </a> </td>
<td><a href="<s:url action="Supmed" namespace="/Supmed"/>"> Supprimer </a> </td>
</tr>
</s:iterator>
</s:if>
</table>
</body>
</html>
我的课MedecinDAO与所需的方法(选择,更新,删除列表)
public Medecin getMedecin(Integer idMedecin) {
log.info("********** Debut getMedecin MedecinDAO **********");
Medecin Medecin = null;
Session session = SessionFactoryUtil.getInstance().openSession();
try {
Medecin = (Medecin) session.get(Medecin.class, idMedecin);
return Medecin;
} catch (Exception e) {
e.printStackTrace();
log.fatal(e.getMessage());
return null;
} finally {
session.close();
log.info("********** Fin getMedecin MedecinDAO **********");
}
}
public boolean saveMedecin(Medecin Medecin) {
log.info("********** Debut saveMedecin MedecinDAO **********");
Session session = SessionFactoryUtil.getInstance().openSession();
Transaction trans = session.beginTransaction();
try {
session.save(Medecin);
trans.commit();
return true;
} catch (Exception e) {
e.printStackTrace();
log.fatal(e.getMessage());
trans.rollback();
return false;
} finally {
session.close();
log.info("********** Fin saveMedecin MedecinDAO **********");
}
}
public boolean updateMedecin(Medecin Medecin) {
log.info("********** Debut updateMedecin MedecinDAO **********");
Session session = SessionFactoryUtil.getInstance().openSession();
Transaction trans = session.beginTransaction();
try {
session.update(Medecin);
trans.commit();
return true;
} catch (Exception e) {
e.printStackTrace();
log.fatal(e.getMessage());
return false;
} finally {
session.close();
log.info("********** Fin updateMedecin MedecinDAO **********");
}
}
public boolean deleteMedecin(Medecin Medecin) {
log.info("********** Debut deleteMedecin MedecinDAO **********");
Session session = SessionFactoryUtil.getInstance().openSession();
try {
Transaction trans = session.beginTransaction();
session.delete(Medecin);
trans.commit();
return true;
} catch (Exception e) {
e.printStackTrace();
log.fatal(e.getMessage());
return false;
} finally {
session.close();
log.info("********** Fin deleteMedecin MedecinDAO **********");
}
}
public List<Medecin> allmedecin(){
List<Medecin> medecin = null;
Session session = SessionFactoryUtil.getInstance().openSession();
String registr = "from Medecin";
Query query = session.createQuery(registr);
medecin=query.list();
return medecin;
}
最后我的动作类,formMedAction.java
//getters,setters...
//this method is for adding Medecin/doctors
public String Ajoutmed() {
MedecinDAO medDAO= MedecinDAO.getInstance();
Medecin M = new Medecin();
M.setIdmed(idmed);
M.setNom(nom);
M.setPrenom(prenom);
M.setContact(contact);
M.setSpecialite(specialite);
medDAO.saveMedecin(M);
return SUCCESS;
}
// return list of all medecin in the table
public String Listmed() throws Exception {
MedecinDAO medDAO = MedecinDAO.getInstance();
Medecin = medDAO.allmedecin();
return SUCCESS;
}
// Method I created to delete the data, but I'm not sure if it correct
public String Supmed() {
MedecinDAO medDAO = MedecinDAO.getInstance();
Medecin M = new Medecin();
M.getIdmed();
M.getNom();
M.getPrenom();
M.getContact();
M.getSpecialite();
medDAO.deleteMedecin(M);
return SUCCESS;
}
public string Modmed() {
//dont know what to do for the modifier/edit action , need your help
return SUCCESS;
}
需要你的帮助谢谢
编辑!
找到一种方法来删除医生用这个代码MedecinDAO:
public Medecin deleteMedecin(Integer idmed) {
log.info("********** Debut deleteMedecin MedecinDAO **********");
Session session = SessionFactoryUtil.getInstance().openSession();
Transaction trans = session.beginTransaction();
Medecin m = (Medecin) session.load(Medecin.class, idmed);
session.delete(m);
trans.commit();
return m;
}
而且在动作类
public String Supmed() {
MedecinDAO medDAO = MedecinDAO.getInstance();
Medecin m = new Medecin();
m = medDAO.deleteMedecin(getIdmed());
return SUCCESS;
}
而且在JSP按钮动作添加此
<td><a href="<s:url action="Supmed" namespace="/pages"><s:param name="idmed" value="%{idmed}"></s:param></s:url>"> Supprimer </a> </td>
现在我需要知道如何编辑
答
好吧,我已经找到了解决办法。
如果你想获得选择的对象参数(ID,名称或其他) 你只需要添加这段代码。 (在我的情况下,例如,我需要:idmed,NOM prenom,接触,specialite)
<td><a class="btn btn-warning" href="<s:url action="editmed" namespace="/pages"> <s:param name="idmed" value="%{idmed}" ></s:param><s:param name="nom" value="%{nom}" ></s:param><s:param name="prenom" value="%{prenom}" ></s:param><s:param name="contact" value="%{contact}" ></s:param><s:param name="specialite" value="%{specialite}" ></s:param></s:url>"> Modifier </a> </td>
您创建一个编辑动作
public String editmed()
{
return SUCCESS;
}
,然后创建一个新的一页,为edit.jsp文件例如,你设置的参数的时值,在struts文本框(选择等)
<s:form action="Modmed" id="Modmed" namespace="/pages" theme="bootstrap" cssClass="bs-example form-horizontal">
<s:textfield label="Identifiant" type="Number" min="1" name="idmed" value="%{idmed}"/>
<s:textfield label="Nom" name="nom" value="%{nom}" />
<s:textfield label="Prenom" name="prenom" value="%{prenom}" />
<s:textfield label="Contact" name="contact" value="%{contact}" />
<s:textfield label="Spécialité" name="specialite" value="%{specialite}"/>
<div class="col-lg-9 col-lg-offset-3">
<s:submit cssClass="btn btn-primary" value="Sauvegarder"/>
</div>
</s:form>
,它应该工作!
答
编辑应该像您一样的方式删除。首先,你可以得到Medecin
对象,你婉更新:
Medecin med = (Medecin) session.get(Medecin.class, idmed);
med.setNom("Andrea"); //set new values of your columns
在设置属性要更新:
public Medecin updateMedecin(Medecin updatedObject) {
log.info("********** Debut updateMedecin MedecinDAO **********");
Session session = SessionFactoryUtil.getInstance().openSession();
Transaction trans = session.beginTransaction();
session.save(updatedObject);
trans.commit();
return updatedObject;
}
编辑:如果您需要设置新的选择Medecin对象的值JSP页面,首先你需要一个表格来更新列,第二你要通过idMed形成页,
的编辑操作JSP按钮:
<td><a href="<s:url action="edit" namespace="/edit"><s:param name="idmed" value="%{idmed}"></s:param></s:url>"> Edit</a> </td>
窗体页:
<s:form action="update">
<s:push value="medecin">
<s:hidden name="idmed" />
<s:textfield name="name" label="User Name" value="%{medecin.nom} />
<s:textfield name="surname" label="Sur Name" value="%{medecin.prenom} />
<s:submit />
</s:push>
</s:form>
最后,你可以从JSP获取ID参数:
request.getParameter("idmed")
thx但是,如何在新的JSP页面中设置所选Medecin对象的值,在表单中设置idmed,nom等的值。 –
我编辑了我的文章@KaneSamba – fiskra
好的thx,但仍然面临问题。我想我编辑行动出了错误。 public String edit() { String param = ServletActionContext.getRequest()。getParameter(“idmed”); return SUCCESS; },这是我所做的,但我有一个空白页面,我只有标题,窗体不显示。我创建了另一个jsp页面,在和param中设置编辑动作,填写表单,就像你做的那样。但我想唯一剩下的就是现在的Action类,编辑方法。 –