Struts2+EasyUI+Hibernate小实例

时间:2023-03-09 16:54:27
Struts2+EasyUI+Hibernate小实例

概述

  这个实例主要是前台数据到后台数据的传递和后台数据到前台数据的传递,完成数据的新增,以及对新增数据的展示。下面是详细的过程:

Hibernate(数据库部分)

  这里只是数据库的连接和数据库实体与物理表的映射。

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.username">xiaoliu</property>
<property name="connection.password">hm123456</property>
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<mapping class="com.lt.entity.Student" />
</session-factory>
</hibernate-configuration>

hibernate.cfg.xml文件配置

 package com.lt.entity;

 import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table; @Entity
@Table
public class Student { private String name;
@Id
private String noid;
private String password;
private String hobby;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNoid() {
return noid;
}
public void setNoid(String noid) {
this.noid = noid;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
} }

实体Student类

 package com.lt.dao;

 import java.util.List;

 import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction; import com.lt.action.BasicAction;
import com.lt.entity.Student; public class StudentDao extends BasicAction{ public void addStudent(Student student){
Session session = factory.openSession();
Transaction transaction = session.beginTransaction();
try {
session.save(student);
transaction.commit();
System.out.println("success");
} catch (Exception e) {
e.printStackTrace();
transaction.rollback();
}finally{ session.close();
} } public Student queryStudent(String noid){
Session session = factory.openSession();
Transaction transaction = session.beginTransaction();
String sql = "from Student where noid = ?";
Student list = null ;
try {
list = (Student) session.get(Student.class, noid);
transaction.commit();
} catch (HibernateException e) {
transaction.rollback();
// TODO Auto-generated catch block
e.printStackTrace();
}finally{ session.close();
}
return list;
}
}

数据库操作类(只有新增和查询)

EasyUI(页面jsp文件)

  这里对jsp的页面中的样式没有什么设计,主要是js功能的实现。

 <%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="resource/easyui.css">
<link rel="stylesheet" type="text/css" href="resource/icon.css">
<script type="text/javascript" src="resource/jquery.min.js"></script>
<script type="text/javascript" src="resource/jquery.easyui.min.js"></script>
<title>Add Student Information</title>
</head> <body>
<script type="text/javascript">
function lal(){
$('#detilfrom').form('submit',{url:"addStudentInfo!addStudentInfo.action",
success: function(data){
var json = eval('(' + data + ')');
if(json.success=="success")
alert(123)
var noid = $("#noid").val();
window.open("getStudentJsp.action?student.noid="+noid);
}}
);
} </script>
<form action="" id = "detilfrom">
name:<input type="text" id="name" name="student.name" /><br>
noid:<input type="text" id="noid" name="student.noid" /><br>
password:<input type="text" name="student.password" /><br>
hobby:<input type ="text" name="student.hobby" /><br>
<input type="button" value="get" onclick="lal()" >
</form>
</body>
</html>

  获得form对象,用EasyUI的form方法,提交表单,成功之后将页面转到展示新增的学生信息的页面。这里从前台传值到后台时使用Struts2的DomainModel将前台数据直接保存到Student实体中,在上述代码中name标签的命名要用实体(Student).属性的形式。在form方法中url要和struts配置文件中action名和方法相对应这样才不会报资源取不到的错误,同时在请求成功之后会执行success对应的方法;在后台获取值的时候,只需要定义一个Student实体,并且创建Student对象的set/get方法即可。下面为后台接收数据的代码(addStudentInfo方法):

package com.lt.action;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import com.lt.dao.StudentDao;
import com.lt.entity.Student;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; public class StudentAction extends ActionSupport {
private Map <String,Object>request; private Map <String,Object>session; private Map <String,Object>application;
private Map<String,Object> s ;
private Student student;
StudentDao studentDao = new StudentDao();
public String getStudentInfo(){
s = new HashMap<String,Object>();
System.out.println(student.getNoid());
Student s1 = studentDao.queryStudent(student.getNoid());
System.out.println(s1.getName());
s.put("student", s1);
return SUCCESS;
}
public String addStudentInfo(){
s = new HashMap<String,Object>();
studentDao.addStudent(student);
s.put("success", "success");
return "success";
}
public String getStudentJsp(){
System.out.println("通过ActionContext来访问request,session,application对象");
// 初始化
request = (Map<String,Object>)ActionContext.getContext().get("request");
session = ActionContext.getContext().getSession();
application = ActionContext.getContext().getApplication();
// 赋值
request.put("requestKey", student.getNoid());
session.put("sessionKey", "sessionValue");
application.put("applicationKey", "applicationValue");
System.out.println(student.getNoid());
return SUCCESS;
}
public Map<String, Object> getS() {
return s;
}
public void setS(Map<String, Object> s) {
this.s = s;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
}

Struts2配置

struts.xml配置文件
 <?xml version="1.0" encoding="UTF-8"?>
<web-app>
<welcome-file-list>
<welcome-file>addStudent.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

web.xml

  在配置文件中package继承了struts-default,json-default,当后台要返回json格式的数据是,在result中指定type为json即可;这里的json传到前台是json字符串,还要在前台进行json格式转换。

在上面Action类中的addStudentInfo方法执行完成之后会来到struts.xml配置文件中找到action中name为addStudentInfo中result中name匹配的标签(success),成功之后会返回执行addStudent.jsp中的from方法success对应的方法,在这个方法中用eval('(' + data + ')')实现了json格式的转换,括弧必不可少。

  到这里,就完成了一次前台数据到后台,后台数据到前台的传递

  下面是获取新添加的数据的过程;

  在上面addStudent.jsp中from方法success对应的方法定位到getStudentJsp.action时,程序又会去一次后台调用对应的getStudentJsp方法,在这个方法中将新添加的student的noid添加到requet域中(添加在其他的类似request域中也ok,但是要注意失不失效问题),供前台获取。

前台获取的页面如下:

 <%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="resource/easyui.css">
<link rel="stylesheet" type="text/css" href="resource/icon.css">
<script type="text/javascript" src="resource/jquery.min.js"></script>
<script type="text/javascript" src="resource/jquery.easyui.min.js"></script>
<title>try to show view</title>
</head> <body>
<script type="text/javascript">
var detilfrom = $("#detilfrom")
$(function(){
noid = ${requestScope.requestKey}
$.ajax({
url : "getStudentInfo!getStudentInfo.action?"+"student.noid="+noid,
type : "post",
datatype : "json",
success : name
});
});
function lal(){
$.ajax({
url : "getStudentInfo!getStudentInfo.action",
type : "post",
datatype : "json",
success : name
});
}
function name(data) {
$.each(data,function(key,value){
alert("key="+key+";"+"value="+value);
})
$("#name").val(data.name);
//data.student = eval(eval(data.stdent));
$("#detilfrom").form('load',data.student);
} </script>
<form action="" id = "detilfrom">
name:<input type="text" id="name" name="name" /><br>
noid:<input type="text" id="noid" name="noid" /><br>
password:<input type="text" name="password" /><br>
hobby:<input type ="text" name="hobby" /><br>
try:<s:property value="#request.requestKey"/>
<input type="button" value="get" onclick="lal()">
</form> </body>
</html>

main.jsp

  在这个页面里面获取后台的数据有俩个方式,一个是${requestScope.requestKey},第二个是利用<s:property value="#request.requestKey"/>标签。在页面进入之后会执行初始化方法,获取数据,展示新添加的学生信息。

在解析后台传递的json数据时,要注意json的key要和form表单的name一直。

  到这里这个流程就完成了,里面需要注意的就是,前台往后台传递数据时,数据很多,可以利用Struts2的DomainModel将整个实体的数据传入后台;在后台前台传递数据的可以用request,application等传递数据,也可以传递json格式数据,但是前台取值的时候要注意json格式转换。

参考的文章:

  http://blog.sina.com.cn/s/blog_4b6f8d150100p1oy.html

  http://blog.****.net/cao478208248/article/details/36888477