如何使用Struts2和hibernate维护会话?

我需要知道如何使用Struts2维护一个表单和多个input[Name,City,Country]会话,最后使用hibernate将数据存储到数据库中。

这个表单有两个按钮:

  1. add (存储到会话);
  2. Submit (存储到数据库)。

首先,输入表单详细信息[name city and country] ,然后单击添加按钮数据将存储到session

其次,输入相同的详细信息,然后单击add

三,输入相同的表单详细信息,但现在单击提交按钮所有详细信息(第一个第二个和第三个)将使用hibernate存储到数据库。

请帮我解决一下……

得到一个错误:我们的代码是:
Person.java:

  @Entity public class Person { @Id @GeneratedValue private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 

PersonAction.java:

 public class PersonAction extends ActionSupport implements SessionAware { private Person person = new Person(); // Database base=new Database(); public Person getPerson() { return person; } public void setPerson(Person person){ this.person = person; } private Map session; public void setSession(Map session){ this.session = session; } public String execute() { //Create persons List personList = (List) session.get("personList"); for (Person p : personList) Database.saveData(this); personList.clear(); return SUCCESS; } public String add() { //Add person List personList = (List) session.get("personList"); if (personList == null) { personList = new ArrayList(); session.put("personList", personList); System.out.println("Successfully added"); } personList.add(person); return SUCCESS; } } 

Database.java:

 public class Database { public static int saveData(PersonAction personAction){ SessionFactory sf=new AnnotationConfiguration().configure().buildSessionFactory(); Session session=sf.openSession(); Transaction tran=session.beginTransaction(); int i=(Integer)session.save(personAction); tran.commit(); session.close(); return i; } } 

struts.xml中:

    /person.jsp   /person.jsp    

的index.jsp:

      

person.jsp:

    

您应该将按钮映射到实际的方法。 默认操作映射器允许使用按钮名称或method属性来指定表单映射使用的方法之外的方法。 例如

      

现在,在您执行SessionAware

 public class PersonAction extends ActionSupport implements SessionAware { private Person person = new Person(); public Person getPerson() { return person; } public setPerson(Person person){ this.person = person; } private Map session; public setSession(Map session){ this.session = session; } public String execute() { //Create persons List personList = (List) session.get("personList"); for (Person p : personList) getPersonService().save(p); // save to db //clear the list personList.clear(); return SUCCESS; } public String add() { //Add person List personList = (List) session.get("personList"); if (personList == null) { personList = new ArrayList(); session.put("personList", personList); } personList.add(person); return SUCCESS; } } 

现在,您通过映射到相应按钮的方法分离了逻辑。 要确保您已启用DMI(动态方法调用) (默认情况下已启用),并且拦截器堆栈defaultStack应用于操作配置(默认情况下已使用)。

struts.xml中:

       /person.jsp    

如果要将servlet会话放入对象中, SessionAware是您的操作或基本操作应实现的接口。 更多关于它的信息 。

ActionContext是动作调用的容器占位符,更详细的解释在这里 。