2

我正在使用 Struts 2 和 Hibernate 集成应用程序在数据库中插入值。但是在从表单字段中插入值之后,只有null值会保存在数据库中。

这是我的表单 JSP 文件:

employee.jsp

<%@ taglib  uri ="/struts-tags" prefix="s"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<s:form action="employee" method="post">
<s:textfield name ="name" label="ENTER your name"/>
<s:textfield name="address" label="Enter Address"/>
<s:submit label="submit">submit</s:submit>

</s:form>
</body>
</html>

实体类Empmodel.java

package model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;


import javax.persistence.Id;
@Entity

public class Empmodel {
@Id @GeneratedValue
private int serialno;
private String name;
private String address;
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getAddress() {
    return address;
}
public void setAddress(String address) {
    this.address = address;
}   
}

Connectionfactory.java

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class ConnectionFactory {


private static  SessionFactory  sessionfactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
    
    
    Configuration config =null;
     SessionFactory sf  =null;
    try{
        config= new Configuration().configure();
        ServiceRegistry servicereg = (ServiceRegistry) new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();
                
                sf= config.buildSessionFactory(servicereg); 
        
        
    }
    catch(Throwable e){
        System.out.println("Initial session factory creation failed"+ e);
        throw new ExceptionInInitializerError(e);
    }
    return sf;
}
 public static SessionFactory getSessionFactory(){
    return sessionfactory;
    }}

Empdao是:

import model.Empmodel;
import org.hibernate.Session;

public class Empdao {

public Empmodel add(){
    Empmodel model = new Empmodel();
    Session session=ConnectionFactory.getSessionFactory().getCurrentSession();
    
    session.beginTransaction();
    
    session.save(model);
    session.getTransaction().commit();
    return model;
}
}

Action类是:

import model.Empmodel;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

import dao.Empdao;

public class Empaction extends ActionSupport implements ModelDriven<Empmodel> {
    private static final long serialVersionUID = 1L;
    private Empmodel model;
    
    
        public String execute() throws Exception{
            Empdao empdao = new Empdao();
            Empmodel queryresult =  empdao.add();
        
            if(queryresult != null) {
                return SUCCESS; 
            }
            else
                return ERROR;   
        }
        @Override
        public Empmodel getModel() {
            // TODO Auto-generated method stub
            return model;
        }
    }
4

1 回答 1

2

如果你想先得到一些东西,你需要放一些东西。这条规则在任何地方都适用。在您的代码中,您需要将模型对象放入 DAO。然后 DAO 将通过拦截器使用模型中填充的值将其保存到数据库中。例如

Empmodel queryresult = empdao.add(model); 

为此,您需要更改方法签名以添加model.

这件事似乎微不足道,但您需要删除model在方法实现中重新创建的语句,它无法正常工作。在开始事务之前还要确保模型不为空。

DAO中的save方法应该检查是否创建了具有null.id

if (model.getId() == null)
  session.save(model);
else
  session.update(model);
}

如何实现ModelDriven集成休眠示例

通过 s2hibernate 插件集成 Struts2 hibernate

于 2013-06-01T14:53:55.520 回答