概述

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

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.csdn.net/cao478208248/article/details/36888477

  

Struts2+EasyUI+Hibernate小实例的更多相关文章

  1. 从一个简单的小实例分析JSP+Servelt与JSP+Struts2框架的区别

    最近在学struts2,struts2相比以前的JSP+Servlet,在处理流程上的更简单,我们就一个小实例来具体分析一下. 实例内容如下: 实现一个简单的注册页面包括:用户名.密码.重复密码.年龄 ...

  2. SSH---整合Struts2&Spring&Hibernate(实例)

    一.SSH回顾 Struts2:核心为过滤器+拦截器.过程:Filter--->FilterDispatcher-->ActionMapper-->ActionProxy--> ...

  3. SSH面试题(struts2+Spring+hibernate)

    struts2 + Spring +hibernate Hibernate工作原理及为什么要用?   原理:   1.读取并解析配置文件   2.读取并解析映射信息,创建SessionFactory ...

  4. ssh框架的小实例(用户登录)

    刚学SSH框架写一个小实例,以便以后查看: 本案例简单的实现一个用户登录: 数据库方面就不写了,自己领悟吧!哈哈(根据user.hbm.xml文件就知道了) 我们一般可以创建下面几个包,什么意思呢,自 ...

  5. SSH(Struts2+Spring+Hibernate)框架搭建流程

    添加支持 我先介绍的是MyEclipse9的自带框架支持搭建过程:(完全的步骤 傻瓜式的学习..~) 首先我们来搭建一个Web项目: 一.Hibernate(数据层)的搭建: 相关描述 Ⅰ.服务器与数 ...

  6. SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>

    此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...

  7. struts2+spring+hibernate(SSH)框架的搭建和总结

    SSH框架:struts2+spring+hibernate,是目前较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. struts2+spring+hibernat ...

  8. 粗浅看Struts2和Hibernate框架

    ----------------------------------------------------------------------------------------------[版权申明: ...

  9. Struts2,Spring,Hibernate框架的优缺点

    Struts2,Spring,Hibernate框架的优缺点 Struts2框架(MVC框架)的优点如下:         1)  实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现:   ...

随机推荐

  1. HTML,javascript,image等加载,DOM解析,js执行生命周期

  2. yii2.0中解决post的400错误

    不想用gii的表单自己写表单,但是又遇到了400错误,怎么解决?下面为你解答一下:

  3. MATLAB入门学习(七)

    开始,线性代数和微积分了,不怕.不怕. 背命令就行了... 线性代数 解线性方程组: Ax=b A是系数矩阵,x未知数,b是列向量 如果有唯一解,直接x=b\A 第二 B=null(A,'r')求Ax ...

  4. Oracle 数据库视图与基表的关系

    本文转载自:http://www.linuxidc.com/Linux/2015-03/115165.htm 一:首先解释什么是视图: 视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中 ...

  5. [USACO08FEB]酒店Hotel

    嘟嘟嘟 这道题以前在学校内网刷过类似的,AC了后还挺有成就感,所以更详细的题解请看这里. 总的来说,就是用线段树维护区间最长连续0.因此我们要维护这么几个值:lmax:从当前区间左端点开始最长的连续0 ...

  6. 机器学习之感知器算法原理和Python实现

    (1)感知器模型 感知器模型包含多个输入节点:X0-Xn,权重矩阵W0-Wn(其中X0和W0代表的偏置因子,一般X0=1,图中X0处应该是Xn)一个输出节点O,激活函数是sign函数. (2)感知器学 ...

  7. 图片验证码——base64编码的使用

    一.介绍: 1.base64编码简介: Base64就是一种编码格式.Base64要求把每三个8Bit的字节转换为四个6Bit的字节(3*8 = 4*6 = 24),然后把6Bit再添两位高位0,组成 ...

  8. 使用jsonp获取天气情况

    在这里使用的是百度天气: 整体代码如下: js: <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js ...

  9. Java基础随笔3

    一. 键盘录入数据概述 我们目前在写程序的时候,数据值都是固定的,但是实际开发中,数据值肯定是变化的,所以,把数据改进为键盘录入,提高程序的灵活性. 键盘录入数据的步骤: A:导包(位置放到class ...

  10. idea操作 clone项目、 import项目所有注解全部报错

    操作:从现有的git上边clone项目,前提是开发工具,开发环境都一样错误类型:所有的注解全部报错 原因: 是选择了Create from existing source 一路Next下去,Maven ...