如何使用Struts2和hibernate维护会话?
我需要知道如何使用Struts2维护一个表单和多个input[Name,City,Country]
会话,最后使用hibernate将数据存储到数据库中。
这个表单有两个按钮:
-
add
(存储到会话); -
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
是动作调用的容器占位符,更详细的解释在这里 。