java - 使用 Struts 2 和 Hibernate 编辑行不起作用

标签 java hibernate jsp struts2 ognl

我无法使用 struts2 hibernate 编辑表。在 Apache 控制台中,我可以看到更新查询已执行,但从表中它只是删除数据,并在尝试插入数据时将其插入到新行而不是同一行中。谁能帮忙看看这段代码有什么问题

用于编辑的 DAO:

public static boolean update(trainee p)
{
    Boolean a=false;
    Session session=new Configuration().configure("hibernate.cfg.xml").buildSessionFactory().openSession(); 
     Transaction tp=session.beginTransaction();  
     trainee u=(trainee) session.get(trainee.class, p.getId());
     if(u!=null)
     {
     u.setAddress(p.getAddress());
     u.setPhone(p.getPhone());
     u.setAge(p.getAge());
     u.setTname(p.getTname());
     u.setGender(p.getGender());
     u.setTechnology(p.getTechnology());
     u.setEmail(p.getEmail());
     session.update(u);
     }
     tp.commit();
     System.out.println("Command successfully executed....");
     session.close();
     if(tp != null){
        a=true;
    }
           return a;
}    

Action 类:

public String update()
{
    String x="input";
    trainee u=new trainee();
    u.setId(id);
    u.setAddress(address);
    u.setPhone(phone);
    u.setAge(age);
    u.setTname(tname);
    u.setGender(gender);
    u.setTechnology(technology);
    u.setEmail(email);
    if(RegisterDao.update(u))
        {
        x="success";
        }
    return x;
}

Struts.xml

<action name="update" class="com.ilp.action.taineeAction" method="update">
            <result name="success" type="redirect">TraineeRegistration.jsp</result>
            <result name="input">ViewTrainees.jsp</result> 
</action>

TraineeRegistration.jsp

<s:form action="traineeReg">
<s:textfield label="TraineeName" name="tname"></s:textfield>
<s:textfield label="Email Id" name="email"></s:textfield>
<s:radio name="gender" list="{'Male','Female'}"></s:radio>
<s:textfield label="Age" name="age"></s:textfield>
<s:textfield label="Phone Number" name="phone"></s:textfield>
<s:textarea label="Address" name="address"></s:textarea>
<s:select name="technology" list="{'Java','J2ee','Dot Net','Oracle'}" headerKey="" headerValue="Select" label="SelectTechnology" />
<s:submit/>
</s:form>

Hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC  
      "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
      "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
<hibernate-configuration>  

<session-factory>  
    <property name="hbm2ddl.auto">update</property>  
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="hibernate.connection.url">jdbc:mysql://localhost/javadb</property>
    <property name="connection.username">root</property>  
    <property name="connection.password">cis@123</property>  
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>  
    <property name="show_sql">true</property>
<mapping class="com.ilp.bean.trainee"/>  
</session-factory>  

viewtrainee.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ taglib uri="/struts-tags" prefix="s" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>List Of Trainees Registered</title>
</head>
<body>
<table border=1px>
<tr>
<th>Trainee Name</th>
<th>Email</th>
<th>Gender</th>
<th>Age</th>
<th>Ph No</th>
<th>Address</th>
<th>Technology</th>
<th>Edit</th>
<th>Delete</th>
<s:iterator value="contactList">
    <tr>
        <td><s:property value="tname" /></td>
        <td><s:property value="email" /></td>
        <td><s:property value="gender" /></td>
        <td><s:property value="age" /></td>
        <td><s:property value="phone" /></td>
        <td><s:property value="address" /></td>
        <td><s:property value="technology" /></td>
        <td><a href="update?id=<s:property value="id"/>">edit</a></td>
        <td><a href="delete?id=<s:property value="id"/>">delete</a></td>
    </tr>
</s:iterator>
</table>

<a href="TraineeRegistration.jsp">Add Trainee</a> &nbsp;&nbsp;
</body>
</html>

最佳答案

您没有在操作中设置 id 属性。一旦使用您在 hibernate session 中获取的对象的值设置了属性,您就可以使用 OGNL 将隐藏字段绑定(bind)到该属性。

<s:form action="traineeReg">
<s:hidden name="id" value="%{id}"/>
<s:textfield label="TraineeName" name="tname"></s:textfield>
<s:textfield label="Email Id" name="email"></s:textfield>
<s:radio name="gender" list="{'Male','Female'}"></s:radio>
<s:textfield label="Age" name="age"></s:textfield>
<s:textfield label="Phone Number" name="phone"></s:textfield>
<s:textarea label="Address" name="address"></s:textarea>
<s:select name="technology" list="{'Java','J2ee','Dot Net','Oracle'}" headerKey="" headerValue="Select" label="SelectTechnology" />
<s:submit/>
</s:form>

当您调用u.setId(id);时,该值应该已经存在。

您还应该修改代码以能够插入新记录。

 if (p.getId() != null) {
  trainee u=(trainee) session.get(trainee.class, p.getId());
  u.setAddress(p.getAddress());
  u.setPhone(p.getPhone());
  u.setAge(p.getAge());
  u.setTname(p.getTname());
  u.setGender(p.getGender());
  u.setTechnology(p.getTechnology());
  u.setEmail(p.getEmail());    
  session.update(u);
 } else session.save(p);

关于java - 使用 Struts 2 和 Hibernate 编辑行不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30930693/

相关文章:

java - 真的需要通配符泛型吗?

java - 如何按标识符或主键的顺序加载多个 Hibernate 实体

java - 如何使用 Spring Data JPA 获取不同的实体字段?

java - Tomcat 7 更新后继续使用旧的 jsp

java - findViewByID 方法不接受 ListView

java - 如何在启动时预初始化 DBCP 连接池?

java - 矩形不更新也不显示颜色

java - 仅将 Map 或映射文件与 Hibernate 一起使用

javascript - Ajax调用返回Object(object),如何从中获取值

java - 使用 MVC 和 DAO 模式在 JSP 页面中的 HTML 中显示 JDBC 结果集