我需要知道如何使用Struts2维护一个表单和多个输入[姓名,城市,国家]的会话,最后使用Hibernate将数据存储到数据库。
此窗体有两个按钮:
- 添加(存储到会话);
- 提交(存储到数据库)。
- 首先,输入表单详细信息[城市和国家名称]并单击添加按钮,数据将存储到会话中。
- 其次,输入same的详细信息,然后单击“添加”。
- 第三,输入相同的表单详细信息,但现在点击提交按钮,所有详细信息(第一、第二和第三)将使用休眠存储到数据库中。
请帮我解决这个问题。
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<String, Object> session;
public void setSession(Map<String, Object> session){
this.session = session;
}
public String execute() { //Create persons
List<Person> personList = (List<Person>) session.get("personList");
for (Person p : personList)
Database.saveData(this);
personList.clear();
return SUCCESS;
}
public String add() { //Add person
List<Person> personList = (List<Person>) session.get("personList");
if (personList == null) {
personList = new ArrayList<Person>();
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:
<struts>
<package name="default" extends="struts-default">
<action name="person" class="org.PersonAction">
<result>/person.jsp</result>
</action>
<action name="person" class="org.PersonAction" method="add">
<result>/person.jsp</result>
</action>
</package>
</struts>
index.jsp:
<s:form action="person">
<s:textfield label="Enter your name" name="name"/>
<s:submit value="Add person" method="add"/>
<s:submit value="Create persons"/>
</s:form>
person.jsp:
<body>
<s:property value="#session.name"/>
</body>
3条答案
按热度按时间tnkciper1#
首先读取Best Practices When Using SessionAware
我会给你一些提示,Struts2遵循
MVC pattern
(或者这种模式的一个变体)。所以你有你的表示层,在那里你向你的控制器(PersonAction)发送一个事件,在这里你必须与你的模型(业务层数据库,Person)通信,模型向控制器返回或不返回一些东西,控制器决定显示什么。你的问题是你要发送
PersonAction
到你的DataBase
,你必须发送用hibMap的Person
:)。并且尽量不要使用静态方法,因为如果你在并发应用程序中,很多用户会访问saveData
方法这可不好
你必须做这样的事
并在Database类中定义一个方法
在
Person
类中,还必须Mapname属性注意我不建议对这类事情使用静态方法
5cnsuln72#
在操作类中使用以下方法
你可以在execute方法中使用这段代码
scyqe7ek3#
按如下所示构建SessionFactory。