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配置
<?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.csdn.net/cao478208248/article/details/36888477
Struts2+EasyUI+Hibernate小实例的更多相关文章
- 从一个简单的小实例分析JSP+Servelt与JSP+Struts2框架的区别
最近在学struts2,struts2相比以前的JSP+Servlet,在处理流程上的更简单,我们就一个小实例来具体分析一下. 实例内容如下: 实现一个简单的注册页面包括:用户名.密码.重复密码.年龄 ...
- SSH---整合Struts2&Spring&Hibernate(实例)
一.SSH回顾 Struts2:核心为过滤器+拦截器.过程:Filter--->FilterDispatcher-->ActionMapper-->ActionProxy--> ...
- SSH面试题(struts2+Spring+hibernate)
struts2 + Spring +hibernate Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory ...
- ssh框架的小实例(用户登录)
刚学SSH框架写一个小实例,以便以后查看: 本案例简单的实现一个用户登录: 数据库方面就不写了,自己领悟吧!哈哈(根据user.hbm.xml文件就知道了) 我们一般可以创建下面几个包,什么意思呢,自 ...
- SSH(Struts2+Spring+Hibernate)框架搭建流程
添加支持 我先介绍的是MyEclipse9的自带框架支持搭建过程:(完全的步骤 傻瓜式的学习..~) 首先我们来搭建一个Web项目: 一.Hibernate(数据层)的搭建: 相关描述 Ⅰ.服务器与数 ...
- SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>
此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...
- struts2+spring+hibernate(SSH)框架的搭建和总结
SSH框架:struts2+spring+hibernate,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. struts2+spring+hibernat ...
- 粗浅看Struts2和Hibernate框架
----------------------------------------------------------------------------------------------[版权申明: ...
- Struts2,Spring,Hibernate框架的优缺点
Struts2,Spring,Hibernate框架的优缺点 Struts2框架(MVC框架)的优点如下: 1) 实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现: ...
随机推荐
- 使用cocostudio 需要在Android.mk文件的配置
直接贴上Android.mk文件吧. 对了,是cocos2d3.0的,不知道2.x是否一样. LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LO ...
- Maximum Subarray解题报告zz
http://fisherlei.blogspot.com/2012/12/leetcode-maximum-subarray.html Find the contiguous subarray wi ...
- mongodb数据库备份恢复-windows系统
备份语法: mongodump命令脚本语法如下: >mongodump -h dbhost -d dbname -o dbdirectory -h: MongDB所在服务器地址,例如:127.0 ...
- Struts2学习-Ioc学习-spring
1.面向对象写法(带着面向过程的思维)电脑 computer = new 电脑(); [电脑代码中 new 打印机()]computer.打印文本("hello 140"); 电脑 ...
- (名词 形容词 动词 副词)重读&(冠词 介词 连词 代词 辅助词(Be))弱读
二,一些发音规则 除了上面的练习之外,这里还有几个注意点需要我们有足够的认识,那就是英语有重读.弱读.连读.爆破.语感(节奏和断句)等(其实当你跟读并背诵新概念之后,这一切都是神马,你不知觉地也会发现 ...
- 50. Pow(x, n) (recursion)
Implement pow(x, n), which calculates x raised to the power n (xn). Example 1: Input: 2.00000, 10 Ou ...
- 有趣的IntegerCache
一个很有趣的现象,下面这两个结果输出的结果是false true,这是为什么? 翻看Integer的源码可以看到,当new Integer(12);时,没有什么特别的,就是通过构造方法创建了一个I ...
- 请求是如何传递给StandardEngine的?
将请求的传递过程分解学习. CoyoteAdapter将中持有Connector的引用,所以在Coyote这个类中Connector查找它所属的StandardService,而StandardSer ...
- BZOJ3143:[HNOI2013]游走(高斯消元)
Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点, ...
- Lua脚本认知小结
0.前言 Lua是一种脚本语言,笔者在学习cocos2dx的时候认识了这个脚本语言. 据个人了解的脚本语言最大的优势是无需编译,使用其内核可以使其跨平台运行. JavaScript,Python,Pe ...