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模式,层次结构清晰,使程序员只需关注业务逻辑的实现: ...
随机推荐
- Mysql 启动失败常见错误
各位可以按照顺序逐条拍错. mysql启动时报错:Starting MySQL... ERROR! The server quit without updating PID file (/opt/my ...
- Linux下配置免密登录!
ssh-keygen 产生公钥与私钥对. ssh-copy-id 将本机的公钥复制到远程机器的authorized_keys文件中,ssh-copy-id也能让你有到远程机器的home, ~./ss ...
- 手把手带你理解style
在写代码的时候,经常遇到自定义的style,有的用来设置属性,有的用来设置主题,搞的自己云里雾里,因此在心底暗暗发誓,等到空闲的时候,一定好好学学android中的style的究竟是个什么东西,到底有 ...
- iOS 人机交互指导方针(iOS Human Interface Guidelines)
iOS 人机交互指导方针(iOS Human Interface Guidelines) 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名 ...
- UVa 1635 - Irrelevant Elements(二项式系数 + 唯一分解定理)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- js 页面 json对象转数组
json_array(data); function json_array(data){ var len=eval(data).length; var arr=[]; for(var i=0;i< ...
- LSOF 安装与使用(功能强大)
Linux上安装: tar zxvf lsof_4.76.tar.gz cd lsof_4.76 ls 00.README.FIRST_4.76 lsof_4.76_src.tar.gz ...
- maven 打包时动态替换properties资源文件中的配置值
pom build节点下面添加resource配置: <resources> <resource> <directory>src/main/resources/&l ...
- 【luogu P3366 最小生成树】 题解 Prim
include include include include using namespace std; const int maxn = 505000; int n, m, dis[maxn], v ...
- 分别利用(代码,Xib,SB)创建空的App工程
1. 利用代码: 2.利用XIB: 3.利用Storyboard: Xcode 7默认该方式创建项目工程,就不必多说了!