Java 使用struts2和hibernate维护会话?
我需要知道如何使用Struts2维护一个表单和多个输入[姓名、城市、国家]的会话,最后使用hibernate将数据存储到数据库中 此表单有两个按钮:Java 使用struts2和hibernate维护会话?,java,hibernate,jsp,struts2,Java,Hibernate,Jsp,Struts2,我需要知道如何使用Struts2维护一个表单和多个输入[姓名、城市、国家]的会话,最后使用hibernate将数据存储到数据库中 此表单有两个按钮: 添加(存储到会话) 提交(存储到数据库) 首先,输入表单详细信息[name city and country],然后单击添加按钮,数据将存储到会话中 其次,输入相同的详细信息,然后单击添加 第三,输入相同的表单详细信息,但现在单击提交按钮,所有详细信息(第一、第二和第三)将使用hibernate存储到数据库中 请帮我解决这个问题 Person.
- 添加(存储到会话)李>
- 提交(存储到数据库)
- 首先,输入表单详细信息[name city and country],然后单击添加按钮,数据将存储到会话中
- 其次,输入相同的详细信息,然后单击添加
- 第三,输入相同的表单详细信息,但现在单击提交按钮,所有详细信息(第一、第二和第三)将使用hibernate存储到数据库中
@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;
}
}
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>
/person.jsp
/person.jsp
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>
在action类中使用以下方法
/**
* Convenience method to get the request.
* @return current request
*/
protected HttpServletRequest getRequest() {
return ServletActionContext.getRequest();
}
/**
* Convenience method to get the response.
* @return current response.
*/
protected HttpServletResponse getResponse() {
return ServletActionContext.getResponse();
}
/**
* Convenience method to get the session. This will create a session if one
* doesn't exist.
* @return the session from the request (request.getSession()).
*/
protected HttpSession getSession() {
return getRequest().getSession();
}
您可以在execute方法中使用此代码
getRequest().getSession().setAttribute("projectData", scheduleData);
首先读
我会给你提示,Struts2遵循MVC模式
(或此模式的变体)。因此,您有一个表示层,在那里您向控制器(PersonAction)发送一个事件,在这里您必须与您的模型(业务层数据库,Person)通信,模型是否返回到控制器,控制器决定显示什么
您的问题是,您要将PersonAction
发送到数据库
,您必须发送映射到hibernate:)的Person
。
尝试不使用静态方法,因为如果您在并发应用程序中,许多用户将访问该方法saveData
这很糟糕
for (Person p : personList)
Database.saveData(this);
你必须这样做
Database.saveData(personList);
并在数据库类中定义一个方法
public static int saveData(List<Person> person)
public static int saveData(列出个人)
在Person
类中,还必须映射name属性
注意我不建议对这类事情使用静态方法如下构建会话工厂
sessionFactory = new Configuration().configure().buildSessionFactory();
…我需要完整的源代码。。。事情很糟糕。。你试着做什么?查看更新:首先我是struts2新手,你能帮我解决问题吗?Ruchi:我在hibernate中使用注释,所以我们改为AnnotationConfiguration()…这不是我的问题:(哦,那么我的建议对你没有帮助不喜欢那个人…在hibernate中当我们使用注释时,配置详细信息将更改为=SessionFactory sf=new AnnotationConfiguration().Configure.buildSessionFactory();如果你不使用注释,则配置为=SessionFactory sf=new configuration().Configure.buildSessionFactory();问题是关于struts2会话(SessionWare):)
sessionFactory = new Configuration().configure().buildSessionFactory();