struts2和hibernate 传值问题和实体类设计问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2和hibernate 传值问题和实体类设计问题相关的知识,希望对你有一定的参考价值。

设计实体类的时候,因为数据库设计的表有外键,所以我的实体类中有一个其他实体类的类对象,我也设计了hibernate映射文件,那么我struts2Action类怎么给这个类对象赋值?前台的JSP表单该怎么设置?
例子
Student类
学生属性;
Grade grade; //这对象表示该学生在哪个班,根据班级ID来确认学生在哪个班 ,数据库的表体现为外键
get() set()省略;

班级类
int g_id; //这对象表示该学生在哪个班
班级其他属性;
get() set()省略;


xxxAction
学生属性;
Grade grade;//那怎么给这个类的g_id赋值?
get() set()省略;


急急急啊!菜鸟坐等!!!
班级类=Grade

我说的赋值是前台表单提交之后 struts2 怎么给xxxAction类的Grade这个属性赋值?

参考技术A Struts2有ognl表达式 把你需要提交的name设置就可以 如 <input name="student.grade.g_id" value="1班" type="text"/> 参考技术B 前台表单name值写grade.类属性,struts2自己帮你封装

如何使用 Struts2 和 Hibernate 删除和修改数据

【中文标题】如何使用 Struts2 和 Hibernate 删除和修改数据【英文标题】:How to Delete and Modify Datas using Struts2 and Hibernate 【发布时间】:2017-10-05 20:30:39 【问题描述】:

我创建了一个 jsp 页面,通过 hibernate 框架和 struts2 向我显示了我的 mysql 数据库中包含的医生列表(法语为 medecin)。

我有一个删除按钮 supprimer(法语),用于删除医生,还有一个按钮 modifier,用于编辑医生的数据。

编辑按钮 modifier 将获取所选医生的所有数据(id、nom、prenom 等)并将其放入表格中,以便我可以更新它。

ListMed 行动给我这个。

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>

现在我需要知道如何编辑

【问题讨论】:

【参考方案1】:

好的,我找到了解决方案。

如果你想获取选中的对象参数(id , name 什么的) 您只需要添加此代码。 (以我为例,我需要:idmed、nom prenom、contact、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>

它应该可以工作!

【讨论】:

【参考方案2】:

Edit 应该与 delete 类似。首先你可以得到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;

已编辑:如果您需要在新的 JSP 页面中设置所选 Medecin 对象的值,首先您需要一个表单来更新列,其次您必须将 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 等的值,例如,在更新之前?跨度> 好的,谢谢,但仍然面临问题。我想我在编辑 Action 时出错了。 public String edit() String param = ServletActionContext.getRequest().getParameter("idmed");返回成功; ,这就是我所做的,但我有一个空白页,我只有标题,表格没有显示。我创建了另一个 jsp 页面,在 和参数中设置编辑操作,像你一样填写表格。但我想现在唯一剩下的就是在 Action 类中,编辑方法了。

以上是关于struts2和hibernate 传值问题和实体类设计问题的主要内容,如果未能解决你的问题,请参考以下文章

struts2+springmvc+hibernate开发。个人纪录

使用注解的方式搭建基本hibernate和struts2运行环境

Struts2+EasyUI+Hibernate小实例

struts2+hibernate整合开发步骤

Struts2,Spring, Hibernate三大框架SSH的整合步骤

struts2+spring+hibernate 实现分页