概述

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

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. windows常用快捷命令

    打开控制面板 control.exe 1.操作中心 wscui.cpl 2.Windows防火墙 Firewall.cpl 3.设备管理器 hdwwiz.cpl 4.Internet属性 inetcp ...

  2. Jquery学习---一键上传

    一键上传 jar包下载 jquery代码 $(function () { $(".uploadfile").upload({ action: 'CourseXMLFileUploa ...

  3. 11G R2 RAC添加监听

    步骤如下: 检查默认network的network number,红色字体1,一会儿添加监听会用到: [grid@rac121 admin]$ srvctl config network Networ ...

  4. redis知识树

  5. libevent核心-event和event_base结构体

    参考:http://blog.csdn.net/yusiguyuan/article/category/2171081/2 http://blog.csdn.net/sparkliang/articl ...

  6. shiro密码的比对,密码的MD5加密,MD5盐值加密,多个Relme

    有具体问题的可以参考之前的关于shiro的博文,关于shiro的博文均是一次工程的内容 密码的比对   通过AuthenticatingRealm的CredentialsMatcher方法 密码的加密 ...

  7. halcon 分水领域法详解(转载)

    寻思自己写了的,但是这个大佬写的太好了,感谢Y忍冬草_ http://blog.csdn.net/y363703390 https://blog.csdn.net/y363703390/article ...

  8. 【luogu P1073 最优贸易】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1073 对于状态量相互影响的题目,分层图是个不错的想法. 考虑在题目中分为: 不交易: 直接从1到n出去,为0 ...

  9. DB2 编目并访问远程数据库

    之后将逐步对项目上的DB2相关经验做个总结,梳理一下知识结构. 要远程操作数据库,首先要进行编目,分三个步骤: 1. 在客户端建立服务器端数据库的节点,编目远程节点. 格式如下: 1. CATALOG ...

  10. @class CLASS ;必须加分号,且卸载@interface之前

    1. @class CLASS ;必须加分号,且卸载@interface之前 示例代码如下: #import <UIKit/UIKit.h> @class WZProduct;  //注意 ...