目录
8、 在applicationContext.xml中增加hbm文件的描述
10、 新建TeacherDaoImp实现TeacherDao接口中的方法
11、 在applicationContext.xml中增加bean对象
14、 对SysRelation表和SysMenu表创建反向工程
16、 新建RelationDaoImp类实现relationDao接口
17、 在applicationContext.xml增加bean对象
19、 对activity表和activity_type 表创建反向工程
20、 在applicationContext.xml中增加两个hbm文件的描述
22、 新建ActivityDaoImp类实现ActivityDao中的方法
(1)在struts.xml增加action punishActivity
(2)在webAction中增加publishActivity方法
(1)在struts.xml中新增action addActivity
1、新建工程
输入工程名 SDSYwZDL,版本号选择JavaEE 5
2、导包,并添加引用
将所有需要的包复制进去之后,选中工程,右键->build path->configue build path
选中Add External JARs,然后选中刚刚导入的所有包,添加引用完毕
3、添加spring支持
Spring的版本为2.5
不使用MyEclipse自带的库包,并去掉spring-web和AOP选项
4、添加struts支持
选择对所有的网页进行过滤处理
不使用MyEclipse自带的库包
5、将Struts作为Spring对象进行整合:
1)修改web.xml
添加listener
选择ContextLoaderListener
添加context-param:
参数名:contextConfigLocation,参数值:/WEB-INF/classes/applicationContext.xml
最终的web.xml文件如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>SDSYwZDL</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.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>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
</web-app>
2)在src文件夹下新建struts.properties文件
在该文件中,添加:struts.objectFactory=spring
注意:这个struts.properties文件是struts和spring两个框架的关联文件。
6、添加hibernate支持
选择 3.2 版本,利用 Spring 生成 SessionFactory 类对象,不用自己生成 SessionFactory 类:
不使用Myeclipse自带的库包
7、创建Teacher表的反向工程
因为id是自增字段,所以选择生成方式native
8、在applicationContext.xml中增加hbm文件的描述
因为是中途方向工程,所以需要手动增加hbm文件的描述
<value>org/model/Teacher.hbm.xml</value>
9、新建TeacherDao接口
package web.dao;
import java.sql.Timestamp;
import java.util.List;
import java.util.Map;
import org.model.Teacher;
public interface TeacherDao {
public Teacher login(String name,String psd);//登录
public double pageSum(int j);//分页
public List<Teacher> allTeacher();//找到所有的老师
public Teacher isExist(String tId);
}
10、新建TeacherDaoImp实现TeacherDao接口中的方法
package web.dao.imp;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.model.Teacher;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import web.dao.TeacherDao;
public class TeacherDaoImp extends HibernateDaoSupport implements TeacherDao {
@SuppressWarnings("unchecked")
@Override
public Teacher login(String name, String psd) {
String[] parm = {name, psd};
List<Teacher> l = getHibernateTemplate()
.find("from Teacher t where t.id.TTeacherId = ? and t.TPassword = ?",parm);
if (l.size() > 0) {
return l.get(0);
} else
return null;
}
@Override
public double pageSum(int j) {
Session session = getSession();
System.out.println(j);
Query query;
String b[]={"商学院","信息学院","人文学院","机械学院","外国语学院","建筑学院","设计学院","理学院","中旅学院"};
if(j==0){
query = session.createQuery("select count(*) from Teacher where t_power=1");
}else{
query= session.createQuery("select count(*) from Teacher where t_power=1 and t_college=?");
query.setParameter(0, b[j-1]);//传参
}
Long c = (Long) query.uniqueResult();
double a=c;
session.close();
return a;
}
@SuppressWarnings("unchecked")
@Override
public List<Teacher> allTeacher() {
Session ssn = getSession();
Query query = ssn.createQuery("from Teacher where TPower=1");
List<Teacher> l = query.list();
ssn.close();
return l;
}
@Override
public Teacher isExist(String tId) {
// TODO Auto-generated method stub
List<Teacher> list = getHibernateTemplate().find(
"from Teacher s where s.id.TTeacherId=?", tId);
if (list.size()>0) {
return list.get(0);
}else{
return null;
}
}
}
11、在applicationContext.xml中增加bean对象
<bean id="teacherDaoImp" class="web.dao.imp.TeacherDaoImp">
<property name="sessionFactory" ref="mysessionFactory"></property></bean>
<bean id="webAction" class="web.action.WebAction">
<property name="teacherDao" ref="teacherDaoImp"></property>
</bean>
12、登录功能的实现
(1)在struts.xml增加login action
<action name="login" method="login" class="webAction">
<result type="json" name="success">
<param name="root">s</param>
</result>
</action>
(2)在WebAction中增加login方法
Teacher teacher;
TeacherDao teacherDao;
private int result;
private String psdMd5;
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
public TeacherDao getTeacherDao() {
return teacherDao;
}
public void setTeacherDao(TeacherDao teacherDao) {
this.teacherDao = teacherDao;
}
public int getResult() {
return result;
}
public void setResult(int result) {
this.result = result;
}
public String getPsdMd5() {
return psdMd5;
}
public void setPsdMd5(String psdMd5) {
this.psdMd5 = psdMd5;
}
public String login() throws Exception {
System.out.println("开始登陆" );
Teacher t = teacherDao.login(name, MD5Util.MD5(psdMd5));
if (t == null) {
result = 1;
} else {
result = 0;
Integer p = 1;
session.put("user", t);
session.put("power", t.getTPower());
session.put("loginname", t.getTName());
session.put("loginid", t.getId().getTTeacherId());
session.put("id", t.getId().getTId());
session.put("actpag", p);// 用于活动分页
session.put("itempag", p);// 用于活动类别分页1
session.put("addresspag", p);// 地址分页2
session.put("announcepag", p);// 公告分页3
}
s = JSONTools.createJsonObject("result", result);
return "success";
}
(3)新建login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<base >
<title>后台登陆</title>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" />
<meta http-equiv="X-UA-Compatible" content="IE=9" />
<link rel="stylesheet" href="css/reset2.css">
<link rel="stylesheet" href="css/style2.css" media="screen" type="text/css" />
<style>
body {
background-color: #FEFEFE;
}
</style>
<link rel="stylesheet" type="text/css" href="css/style3.css">
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
<link rel="stylesheet" href="css/bootstrap.min.css" />
<link rel="stylesheet" href="css/bootstrap-responsive.min.css" />
<link rel="stylesheet" href="css/matrix-login.css" />
<link href="font-awesome/css/font-awesome.css" rel="stylesheet" />
<script src="http://apps.bdimg.com/libs/html5shiv/3.7/html5shiv.min.js"></script>
<script src="http://apps.bdimg.com/libs/respond.js/1.4.2/respond.min.js"></script>
<style type="text/css">
input {
font-family: "Microsoft Yahei";
}
.control-label {
color: #B2DFEE;
padding-left: 4px;
}
</style>
</head>
<body>
<script src="js/index.js"></script>
<div id="myDiv">
<div id="loginbox">
<div class="control-group normal_text">
<h2 style="color:#B2DFEE;font-size:28px;">“我的课堂”信息中心</h2>
</div>
<form method="Get" id="loginform" class="form-vertical" action="login.action"
>
<div class="control-group">
<label class="control-label">用户名</label>
<div class="controls">
<div class="main_input_box">
<span class="add-on bg_lg"><i class="icon-user"
style="font-size:16px;"></i></span><input name="name" type="text" />
</div>
</div>
</div>
<div class="control-group2">
<label class="control-label">登陆密码</label>
<div class="controls">
<div class="main_input_box">
<span class="add-on bg_ly"><i class="icon-lock"
style="font-size:16px;"></i></span><input name="psdMd5" type="password" />
</div>
</div>
</div>
<div class="control-group2" style="margin: 0px 0px 0px 21px">
<div id="div_id_embed"></div>
</div>
</form>
<script type="text/javascript">
/*
function refreshyz() //刷新验证
{
gt_captcha_obj.refresh(function() {
pass = false;
});
}*/
window.onload = function() {
$('#loginBtn').click(function() {
$.ajax({
type: "get",
url: "login.action",
dataType: "json",
data: $('#loginform').serialize(),
success: function(data) {
if(data.result == 0) {
window.location.href = 'newIndex.jsp'
} else {
alert("用户名或密码错误");
}
},
error: function() {
alert("失败!");
}
});
});
};
</script>
<div class="form-actions">
<span class="pull-right"> <input type="button" id="loginBtn"
class="btn btn-success" style="width:440px;"
value=" 登 录" />
</span>
</div>
</div>
<script src="js/jquery.min.js"></script>
<script src="js/matrix.login.js"></script>
</div>
</body>
</html>
13、在web.util中增加Md5Util类
package web.util;
import java.security.MessageDigest;
public class MD5Util {
// MD5加码。32位
public static String MD5(String inStr) {
MessageDigest md5 = null;
try {
md5 = MessageDigest.getInstance("MD5");
} catch (Exception e) {
System.out.println(e.toString());
e.printStackTrace();
return "";
}
char[] charArray = inStr.toCharArray();
byte[] byteArray = new byte[charArray.length];
for (int i = 0; i < charArray.length; i++)
byteArray[i] = (byte) charArray[i];
byte[] md5Bytes = md5.digest(byteArray);
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < md5Bytes.length; i++) {
int val = ((int) md5Bytes[i]) & 0xff;
if (val < 16)
hexValue.append("0");
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
}
// 可逆的加密算法
public static String KL(String inStr) {
// String s = new String(inStr);
char[] a = inStr.toCharArray();
for (int i = 0; i < a.length; i++) {
a[i] = (char) (a[i] ^ 't');
}
String s = new String(a);
return s;
}
// 加密后解密
public static String JM(String inStr) {
char[] a = inStr.toCharArray();
for (int i = 0; i < a.length; i++) {
a[i] = (char) (a[i] ^ 't');
}
String k = new String(a);
return k;
}
// 测试主函数
public static void main(String args[]) {
String s = new String("12345678");
System.out.println("原始:" + s);
System.out.println("MD5后:" + MD5(s));
System.out.println("MD5后再加密:" + KL(MD5(s)));
System.out.println("解密为MD5后的:" + JM(KL(MD5(s))));
}
}
14、对SysRelation表和SysMenu表创建反向工程
因为id是自增字段,所以选择生成方式native
15、新建RelationDao接口
package web.dao;
import java.util.List;
import org.model.SysMenu;
import org.model.SysRelation;
public interface RelationDao {
List<SysMenu> findRelation(int id);
List<String> findPmenu(int id);
}
16、新建RelationDaoImp类实现relationDao接口
package web.dao.imp;
import java.util.ArrayList;
import java.util.List;
import org.model.SysMenu;
import org.model.SysRelation;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import web.dao.RelationDao;
public class RelationDaoImp extends HibernateDaoSupport implements RelationDao {
public List<SysMenu> findRelation(int id) {
// TODO Auto-generated method stub
List<Object[]> list=this.getHibernateTemplate().find("from SysMenu m,SysRelation r where m.id=r.mid and r.tid=? order by m.sign",id);
List<SysMenu> listm=new ArrayList<SysMenu>();
if(list!=null&&list.size()>0){
for(int i=0;i<list.size();i++){
listm.add((SysMenu)list.get(i)[0]);
}
}
return listm;
}
public List<String> findPmenu(int id) {
// TODO Auto-generated method stub
List<Object[]> list=this.getHibernateTemplate().find("from SysMenu m,SysRelation r where m.id=r.mid and r.tid=? group by m.name"
+ " order by m.fsign",id);
List<String> listm=new ArrayList<String>();
if(list!=null&&list.size()>0){
for(int i=0;i<list.size();i++){
listm.add(((SysMenu)list.get(i)[0]).getName());
}
}
return listm;
}
}
17、在applicationContext.xml增加bean对象
<bean id="relationDaoImp" class="web.dao.imp.RelationDaoImp">
<property name="sessionFactory" ref="mysessionFactory"></property></bean>
<bean id="webAction" class="web.action.WebAction">
<property name="relationDao" ref="relationDaoImp"></property>
</bean>
18、主界面左侧菜单栏的制作
(1)在struts.xml增加index action
<action name="index" method="index" class="webAction">
<result type="json" name="success">
<param name="root">s</param>
</result>
</action>
(2)在WebAction中增加index方法
private int id;
private RelationDao relationDao;
private JSONObject s;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public RelationDao getRelationDao() {
return relationDao;
}
public void setRelationDao(RelationDao relationDao) {
this.relationDao = relationDao;
}
public JSONObject getS() {
return s;
}
public void setS(JSONObject s) {
this.s = s;
}
public String index() throws Exception {
System.out.println("开始"+id );
List<String> listp = relationDao.findPmenu(id);//父菜单
List<SysMenu> list = relationDao.findRelation(id);
List<Map<String, Object>> lista = new ArrayList<Map<String, Object>>();
SysMenu menu;
if (list != null && list.size() > 0) {
for (String str : listp) {
Map<String, Object> map = new HashMap<String, Object>();
List<Map<String, Object>> listf = new ArrayList<Map<String, Object>>();
map.put("name", str);
for (SysMenu me : list) {
//menu = relationDao.findMenu(re.getMid());
if (str.equals(me.getName())) {
Map<String, Object> mapr = new HashMap<String, Object>();
mapr.put("functions", me.getFunction());
mapr.put("url", me.getUrl());
listf.add(mapr);
}
}
map.put("list", listf);
lista.add(map);
}
}
s = JSONTools.createJsonObject("data", lista);
return "success";
}
(3)新建newIndex.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<% String loginname = (String) session.getAttribute("loginname"); %>
<% String userId = (String) session.getAttribute("loginid"); %>
<% Integer id= (Integer)session.getAttribute("id"); %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page isELIgnored="false"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<% String user = (String) session.getAttribute("loginname");
if(user==null )
{
%>
<script>
parent.location.href="login.jsp"
</script>
<%
}
%>
<!DOCTYPE html>
<html lang="zh">
<head>
<title>“我的课堂”管理系统平台</title>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" />
<meta http-equiv="X-UA-Compatible" content="IE=9" />
<link rel="stylesheet" href="css/bootstrap.min.css" />
<link rel="stylesheet" href="css/bootstrap-responsive.min.css" />
<link rel="stylesheet" href="css/matrix-style.css" />
<link rel="stylesheet" href="css/matrix-media.css" />
<link href="font-awesome/css/font-awesome.css" rel="stylesheet" />
<script src="js/jquery.min.js"></script>
<script src="http://apps.bdimg.com/libs/html5shiv/3.7/html5shiv.min.js"></script>
<script src="http://apps.bdimg.com/libs/respond.js/1.4.2/respond.min.js"></script>
<script src="js/excanvas.min.js"></script>
<script src="js/jquery.ui.custom.js"></script>
<script type="text/javascript">
$(document).ready(function(){
var url="index?id="+<%=id%>;
login(url);
});
function login(url){
$.ajax({
url: url,
type: "Get",
async: false ,
dataType: "json",
success: function(data) {
for(var i=0;i<data.data.length;i++){
var str="<li class='submenu'><a herf='#'><span>"+data.data[i].name+"</span></a><ul>"
for(var j=0;j<data.data[i].list.length;j++){
str+='<li><a class="menu_a" link="'+data.data[i].list[j].url+'"> '+data.data[i].list[j].functions+'</a></li>'
}
str+="</ul></li>"
document.getElementById("index").innerHTML+=str;
}
}
});
}
function unLogin(){
parent.location.href="login.jsp"
//window.location.href = "unLogin";
}
</script>
</head>
<body onunload="unLogin()">
<div id="header">
<h1>
<a>管理平台</a>
</h1>
</div>
<!--top-Header-menu-->
<div id="user-nav" class="navbar navbar-inverse">
<ul class="nav">
<li class="dropdown" id="profile-messages"><a title="" href="#"
data-toggle="dropdown" data-target="#profile-messages"
class="dropdown-toggle"> <i class="icon icon-user"></i> <span
class="text">欢迎你,<%=loginname%>
</span> <b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a class="menu_a" link="allActivity.action"><i
class="icon-check"></i> 我的发布</a></li>
<li class="divider"></li>
<li><a class="menu_a" onclick="unLogin(this)"><i
class="icon-key"></i> 退出系统</a></li>
</ul></li>
</ul>
</div>
<!--close-top-Header-menu-->
<div id="search"></div>
<div id="sidebar" style="OVERFLOW-Y: auto; OVERFLOW-X:hidden;">
<ul id="index">
<c:if test="${sessionScope.power == 4 }">
<li class="submenu"><a href="#"> <i class="icon icon-lock"></i>
<span>权限管理</span>
</a>
<ul>
<li><a class="menu_a" link="relationList.jsp"><i
class="icon icon-caret-right"></i>权限列表</a></li>
</ul>
</li>
</c:if>
</ul>
</div>
<div id="content">
<div id="content-header">
<div id="breadcrumb">
<a href="newIndex.jsp" title="返回主页" class="tip-bottom"><i
class="icon-home"></i> Home</a>
</div>
</div>
<iframe src="allActivity.action?" id="iframe-main" style="width:100%;"></iframe>
</div>
<!--end-main-container-part-->
<script src="js/bootstrap.min.js"></script>
<script src="js/matrix.js"></script>
<script type="text/javascript">
//初始化相关元素高度
function init() {
$("body").height($(window).height() - 80);
$("#iframe-main").height($(window).height() - 90);
$("#sidebar").height($(window).height() - 50);
}
/**/$(function() {
init();
$(window).resize(function() {
init();
});
});
function goPage(newURL) {
if(newURL != "") {
if(newURL == "-") {
}
else {
document.location.href = newURL;
}
}
}
function resetMenu() {
document.gomenu.selector.s // if url is empty, skip the menu dividers and reset the menu selection to default
electedIndex = 2;
}
</script>
</body>
</html>
19、对activity表和activity_type 表创建反向工程
因为id是自增字段,所以选择生成方式native
20、在applicationContext.xml中增加两个hbm文件的描述
<value>org/model/Activity.hbm.xml</value> <value>org/model/ActivityType.hbm.xml</value>
21、新建ActivityDao接口
package web.dao;
import java.util.List;
import org.model.Activity;
public interface ActivityDao {
public double pageSum(int i); //分页
public void addActivity(Activity activity);//增加活动
public List<Activity> allActivity(int i, int j);
}
22、新建ActivityDaoImp类实现ActivityDao中的方法
package web.dao.imp;
import java.util.HashSet;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import web.dao.ActivityDao;
import org.model.Activity;
import org.model.ActivityType;
import org.model.Address;
import org.model.Teacher;
public class ActivityDaoImp extends HibernateDaoSupport implements ActivityDao {
// 页数
@Override
public double pageSum(int i) {
Session session = getSession();
Query query;
if (i == 0) {
query = session
.createQuery("select count(*) from Activity where r_status!=-1");
} else {
query = session
.createQuery("select count(*) from Activity where r_status!=-1 and r_type=?");
query.setParameter(0, ++i);
}
Long b = (Long) query.uniqueResult();
double a = b;
session.close();
return a;
}
// 查询所有活动
@SuppressWarnings("unchecked")
@Override
public List<Activity> allActivity(int i, int k) {
List<Teacher> list = null;
List<ActivityType> list2 = null;
List<Address> list3 = null;
Session ssn = getSession();
Query query;
if (k == 0) {
query = ssn
.createQuery("from Activity where RStatus!=-1 order by RId desc");
} else {
query = ssn
.createQuery("from Activity where RStatus!=-1 and RType=? order by RId desc");
query.setParameter(0, ++k);
}
query.setFirstResult(i);
query.setMaxResults(7);
List<Activity> l = query.list();
int len = l.size();
if (len != 0) {
String[] values1 = new String[len];
Object[] values2 = new Object[len];
Object[] values3 = new Object[len];
StringBuilder sb = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
StringBuilder sb3 = new StringBuilder();
for (int j = 0; j < len; j++) {
values1[j] = l.get(j).getRTId();
values2[j] = l.get(j).getRType();
values3[j] = l.get(j).getRAddress();
if (j != len - 1) {
sb.append("?,");
sb2.append("?,");
sb3.append("?,");
} else {
sb.append("?");
sb2.append("?");
sb3.append("?");
}
}
// 这里的list查询出来的应该包含TeacherId吧
list = getHibernateTemplate().find(
"FROM Teacher t WHERE t.id.TTeacherId IN (" + sb.toString()+ ")", values1);
list2 = getHibernateTemplate().find(
"FROM ActivityType t WHERE t.aid IN (" + sb2.toString()+ ")", values2);
list3 = getHibernateTemplate().find(
"FROM Address t WHERE t.id IN (" + sb3.toString() + ")",values3);
for (Activity a : l) {
for (Teacher entity : list)
if (a.getRTId().equals(entity.getId().getTTeacherId())) {
a.setTeacher(entity);
break;
}
for (ActivityType entity1 : list2)
if (a.getRType() == entity1.getAid()) {
a.setActtype(entity1);
break;
}
for (Address entity2 : list3) if(a.getRAddress().equals(entity2.getId())) {
a.setAddress(entity2);
break;
}
}
}
return l;
}
// 添加活动
@Override
public void addActivity(Activity activity) {
// TODO Auto-generated method stub
this.getHibernateTemplate().save(activity);
}
}
23、发布活动的制作
点击发布活动跳转到发布活动的界面
(1)在struts.xml增加action punishActivity
<action name="publishActivity" class="webAction" method="publishActivity">
<result name="success">/publishActivity.jsp</result>
</action>
(2)在webAction中增加publishActivity方法
private List<Teacher> teacherlist = new ArrayList<Teacher>();
public List<Teacher> getTeacherlist() {
return teacherlist;
}
public void setTeacherlist(List<Teacher> teacherlist) {
this.teacherlist = teacherlist;
}
public String publishActivity() {
teacherlist = teacherDao.allTeacher();
addresslist = addressDao.allAddress();
return "success";
}
(3)新建publishActivity.jsp
<%@page contentType="text/html; charset=UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page isELIgnored="false"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html>
<html>
<!-- Mirrored from www.zi-han.net/theme/hplus/article.html by HTTrack Website Copier/3.x [XR&CO'2014], Wed, 20 Jan 2016 14:19:47 GMT -->
<head>
<meta charset="UTF-8">
<title>发布活动</title>
<link href="jules/css/bootstrap.min14ed.css?v=3.3.6" rel="stylesheet">
<link href="jules/css/font-awesome.min93e3.css?v=4.4.0" rel="stylesheet">
<link href="jules/css/animate.min.css" rel="stylesheet">
<link href="jules/css/style.min862f.css?v=4.1.0" rel="stylesheet">
<link href="jules/css/bootstrap.min14ed.css?v=3.3.6" rel="stylesheet">
<link href="jules/css/font-awesome.min93e3.css?v=4.4.0" rel="stylesheet">
<link href="css/bootstrap-datetimepicker.css" rel="stylesheet">
<link href="jules/css/animate.min.css" rel="stylesheet">
<link href="jules/css/plugins/chosen/chosen.css" rel="stylesheet">
<link href="jules/css/style.min862f.css?v=4.1.0" rel="stylesheet">
<link href="jules/css/plugins/iCheck/custom.css" rel="stylesheet">
<link href="jules/css/plugins/awesome-bootstrap-checkbox/awesome-bootstrap-checkbox.css" rel="stylesheet">
<link rel="stylesheet" href="css/select2.css" />
<script type="text/javascript" src="js/jquery-1.7.2.js"></script>
<style>
th {
background-color: #F5F5F6;
}
</style>
<script type="text/javascript">
// 判断图片大小和格式
function getPhotoSize(obj) {
photoExt = obj.value.substr(obj.value.lastIndexOf(".")).toLowerCase();
if(photoExt != '.jpg' && photoExt != '.png' && photoExt != '.jpeg') {
alert("文件格式错误!");
var nf = obj.cloneNode(true);
nf.value = '';
obj.parentNode.replaceChild(nf, obj);
return false;
}
var fileSize = 0;
var isIE = /msie/i.test(navigator.userAgent) && !window.opera;
if(isIE && !obj.files) {
var filePath = obj.value;
var fileSystem = new ActiveXObject("Scripting.FileSystemObject");
var file = fileSystem.GetFile(filePath);
fileSize = file.Size;
} else {
fileSize = obj.files[0].size;
}
fileSize = Math.round(fileSize / 1024 * 100) / 100; //µ¥Î»ÎªKB
if(fileSize > 2048) {
alert("不接受超过2m的图片!");
return false;
}
}
function a(){
alert("weaw");
windows.location.href="xuanTeacher";
}
</script>
</head>
<body class="gray-bg">
<div class="wrapper wrapper-content animated fadeInRight article">
<div class="row">
<div class="col-lg-10 col-lg-offset-1">
<div class="ibox">
<div class="ibox-content">
<div class="ibox float-e-margins">
<div class="text-center">
<h3>发布活动详情</h3>
</div>
<div class="ibox-content">
<form action="addActivity" name="cform" method="post" enctype="multipart/form-data" id="activityFrom">
<table class="table table-bordered" style="height: auto;">
<tbody>
<tr>
<th>活动形式</th>
<td>
<select class="form-control " name="item" id="acitem" required="required">
<% String user = (String) session.getAttribute("loginname");
if("博雅读书".equals(user)){
%>
<option value="1">书评报告会</option>
<option value="2">读书沙龙</option>
<option value="3">书评撰写</option>
<input name="type" type="hidden" value=2>
<%
}
else if("博雅心情".equals(user)){
%>
<option value="4">理论教学</option>
<option value="5">随堂训练</option>
<option value="6">实践锻炼</option>
<input name="type" type="hidden" value=3>
<%
}
else if("博雅实践".equals(user)){
%>
<option value="7">社会实践</option>
<option value="8">志愿服务</option>
<input name="type" type="hidden" value=4>
<%
}
else if("博雅讲坛".equals(user)){
%>
<option value="9">浙江人文大讲堂之江分讲堂</option>
<option value="10">之江大讲堂</option>
<option value="11">师友讲堂</option>
<option value="12">院长下午茶,书记有约</option>
<option value="13">主题沙龙</option>
<option value="21">新青年月谈</option>
<option value="22">梦湖讲堂</option>
<option value="23">青春有约</option>
<input name="type" type="hidden" value=5>
<%
}
else if("博雅修身".equals(user)){
%>
<option value="14">兴趣社团</option>
<option value="15">阳光长跑</option>
<option value="16">文明寝室建设</option>
<option value="17">体育文化活动</option>
<input name="type" type="hidden" value=6>
<%
}
else if("博雅视野".equals(user)){
%>
<option value="18">出国深造</option>
<option value="19">交换学习</option>
<option value="20">游学访学</option>
<input name="type" type="hidden" value=7>
<%
}
%>
</select>
</td>
<th>活动名称</th>
<td><input class="form-control" type="text" name="name" required="required"></td>
</tr>
<tr>
<th>起始时间</th>
<td><input required="required" class="laydate-icon form-control layer-date" name="startTime1" placeholder="开始时间" onclick="laydate({istime: true, format: 'YYYY-MM-DD hh:mm:ss',min: laydate.now(0)})">
</td>
<th>结束时间</th>
<td><input required="required" class="laydate-icon form-control layer-date" name="endTime1" placeholder="结束时间" onclick="laydate({istime: true, format: 'YYYY-MM-DD hh:mm:ss',min: laydate.now(0)})">
</td>
</tr>
<tr>
<th>起始时间2</th>
<td><input required="required" class="laydate-icon form-control layer-date" name="startTime2" placeholder="开始时间" onclick="laydate({istime: true, format: 'YYYY-MM-DD hh:mm:ss',min: laydate.now(0)})">
</td>
<th>结束时间2</th>
<td><input required="required" class="laydate-icon form-control layer-date" name="endTime2" placeholder="结束时间" onclick="laydate({istime: true, format: 'YYYY-MM-DD hh:mm:ss',min: laydate.now(0)})">
</td>
</tr>
<tr>
<th>可获得学分</th>
<td><input required="required" class="form-control " type="text" name="credit"></td>
<th>活动人数</th>
<td><input required="required" class="form-control " type="text" name="peopleNum"></td>
</tr>
<tr>
<th>参与导师</th>
<td>
<input type="text" class="form-control " id="testInput" />
<input type="hidden" name="fkTeacherId" id="ruleOrgCode" required="required" />
</td>
<th>举办学院</th>
<td>
<select class="form-control " name="college" id="college" required="required">
<option value="1">全部学院</option>
<option value="2">之江学院</option>
<option value="3">信息学院</option>
<option value="4">人文学院</option>
<option value="5">商学院</option>
<option value="6">设计学院</option>
<option value="7">外国语学院</option>
<option value="8">机械学院</option>
<option value="9">中旅学院</option>
<option value="10">建筑学院</option>
<option value="11">理学院</option>
<option value="12">创新创业学院</option>
</select>
</td>
</tr>
<tr>
<th>活动地址</th>
<td>
<select class="form-control " name="addressId" required="required">
<c:forEach items="${addresslist}" var="res">
<option value="${res.id}">${res.name}</option>
</c:forEach>
</select>
</td>
<th>指派学院</th>
<td>
<select class="form-control " name="zdcollege" id="college" required="required">
<option value="1">全部学院</option>
<option value="2">商学院</option>
<option value="3">信息工程学院</option>
<option value="4">人文学院</option>
<option value="5">机械工程学院</option>
<option value="6">外国语学院</option>
<option value="7">建筑学院</option>
<option value="8">设计学院</option>
<option value="9">理学院</option>
<option value="10">中旅学院</option>
</select>
</td>
</tr>
<tr>
<th>活动主图片</th>
<td class="uploader white">
<input required="required" type="file" name="file1" accept="image/*" onchange="getPhotoSize(this)" size=40"/>
</td>
</tr>
<tr>
<th>活动详情</th>
<td colspan="3">
<textarea required="required" class="form-control " rows="3" type="text" id="desc" name="desc"></textarea>
</td>
</tr>
</tbody>
</table>
<div class="form-group" style="height: auto">
<input class="btn btn-sm btn-primary m-t-n-xs pull-right" style="margin-left: 20px" type="submit" value="取消 " />
<input id="submit" class="btn btn-sm btn-primary m-t-n-xs pull-right" type="submit" value="确定 " />
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
var arraytea=new Array();
<c:forEach var="res" items="${teacherlist}">
arraytea.push({name:'${res.TName}'+'>>'+'${res.id.TTeacherId}',code:'${res.id.TTeacherId}'});
</c:forEach>
// alert(datas);
// alert(arraytea);
/**
* 搜索下拉列表
**/
$('#testInput').bind('input propertychange',
function() {
var items = inputChange();//搜索数据并获取搜索结果
if(items != undefined){
_initItems(items);
}
});
//1:搜索数据
var inputChange = function() {
var inputValue = $('#testInput').val();
if(inputValue != "" && inputValue.indexOf("000") == -1){
var matcher = new RegExp(inputValue, "i");
return $.grep(arraytea,
function(value) {
return matcher.test(value.name);
});
}else if(inputValue != "" && inputValue.indexOf("000") != -1){
var matcher = new RegExp(inputValue, "i");
return $.grep(arraytea,
function(value) {
return matcher.test(value.code);
});
}
};
var maxFontNumber = 0;//最大字数
var suggestContainer = $('<div></div>'); //创建一个子<div>
suggestContainer.attr('id', "testInput-suggest");
suggestContainer.attr('tabindex', '0');
suggestContainer.hide();
//2:初始化搜索到的数据进行显示
var _initItems = function(items) {
$('#ruleOrgCode').val("");
suggestContainer.empty();
for (var i = 0; i < items.length; i++) {
if(items[i].name.length > maxFontNumber){
maxFontNumber = items[i].name.length;
}
var suggestItem = $('<div></div>'); //创建一个子<div>
suggestItem.attr('code', items[i].code);
suggestItem.append(items[i].name);
suggestItem.css({
'padding':'3px',//item间距
'white-space':'nowrap',
'cursor': 'pointer',
'background-color': 'RGB(199,237,204)',//默认背景颜色
'color': '#000000'//默认字体颜色
});
suggestItem.bind("mouseover",
function() {
$(this).css({
'background-color': '#C9302C',//选中背景颜色
'color': '#ffffff'//选中字体颜色
});
});
suggestItem.bind("mouseout",
function() {
$(this).css({
'background-color': 'RGB(199,237,204)',//默认背景颜色
'color': '#000000'//默认字体颜色
});
});
suggestItem.bind("click", showClickTextFunction);//选中后处理数据
//suggestItem.bind("click", itemSelectFunction);
suggestItem.appendTo(suggestContainer);
suggestContainer.appendTo(document.body);
}
suggestContainer.removeAttr("style");
suggestContainer.css({
'border': '1px solid #ccc',
'max-height': '200px',
'top': $('#testInput').offset().top + $('#testInput').outerHeight(),
'left': $('#testInput').offset().left,
'width': 12*maxFontNumber + 2 * 3 + 30,
'position': 'absolute',
'font-size': '12px' ,//默认字体大小
'font-family':'Arial',
'z-index': 99999,
'background-color': '#FFFFFF',
'overflow-y': 'auto',
'overflow-x': 'hidden',
'white-space':'nowrap'
});
maxFontNumber = 0;
suggestContainer.show();
};
//3.选中后处理数据
var showClickTextFunction = function() {
//alert(this.innerText + "---" + this.getAttribute("code"));
$('#testInput').val(this.innerText);
$('#ruleOrgCode').val(this.getAttribute("code"));
suggestContainer.hide();
};
</script>
<script src="jules/js/jquery.min.js?v=2.1.4 "></script>
<script src="js/jquery-ui.js "></script>
<script src="jules/js/bootstrap.min.js?v=3.3.6 "></script>
<script src="js/bootstrap-datetimepicker.js "></script>
<script src="js/bootstrap-datetimepicker.zh-CN.js "></script>
<script src="jules/js/content.min.js?v=1.0.0 "></script>
<script src="jules/js/layer/laydate/laydate.js "></script>
<script src="jules/js/plugins/chosen/chosen.jquery.js "></script>
<script src="jules/js/plugins/cropper/cropper.min.js "></script>
<script src="jules/js/demo/form-advanced-demo.min.js "></script>
<script src="jules/js/plugins/iCheck/icheck.min.js "></script>
</body>
<!-- Mirrored from www.zi-han.net/theme/hplus/article.html by HTTrack Website Copier/3.x [XR&CO'2014], Wed, 20 Jan 2016 14:19:47 GMT -->
</html>
24、新增活动的制作
点击确定按钮,无法成功发布活动,因为在publishActivity.jsp的表单的action为addActivity,缺少addActivity action
(1)在struts.xml中新增action addActivity
<action name="addActivity" class="webAction" method="addActivity">
<result name="success" type="chain">allActivity</result>
</action>
(2)在WebAction中增加addActivity方法
private File file1;
private String file1FileName;
private int zdcollege;
private int type;
private int item;
private double credit;
private String fkTeacherId;
private Timestamp createTime;
private Timestamp startTime1;
private Timestamp endTime1;
private Timestamp startTime2;
private Timestamp endTime2;
private Integer peopleNum;
private String desc;
private String college;
public File getFile1() {
return file1;
}
public void setFile1(File file1) {
this.file1 = file1;
}
public String getFile1FileName() {
return file1FileName;
}
public void setFile1FileName(String file1FileName) {
this.file1FileName = file1FileName;
}
public int getZdcollege() {
return zdcollege;
}
public void setZdcollege(int zdcollege) {
this.zdcollege = zdcollege;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public int getItem() {
return item;
}
public void setItem(int item) {
this.item = item;
}
public double getCredit() {
return credit;
}
public void setCredit(double credit) {
this.credit = credit;
}
public String getFkTeacherId() {
return fkTeacherId;
}
public void setFkTeacherId(String fkTeacherId) {
this.fkTeacherId = fkTeacherId;
}
public Timestamp getCreateTime() {
return createTime;
}
public void setCreateTime(Timestamp createTime) {
this.createTime = createTime;
}
public Timestamp getStartTime1() {
return startTime1;
}
public void setStartTime1(Timestamp startTime1) {
this.startTime1 = startTime1;
}
public Timestamp getEndTime1() {
return endTime1;
}
public void setEndTime1(Timestamp endTime1) {
this.endTime1 = endTime1;
}
public Timestamp getStartTime2() {
return startTime2;
}
public void setStartTime2(Timestamp startTime2) {
this.startTime2 = startTime2;
}
public Timestamp getEndTime2() {
return endTime2;
}
public void setEndTime2(Timestamp endTime2) {
this.endTime2 = endTime2;
}
public Integer getPeopleNum() {
return peopleNum;
}
public void setPeopleNum(Integer peopleNum) {
this.peopleNum = peopleNum;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getCollege() {
return college;
}
public void setCollege(String college) {
this.college = college;
}
public String addActivity() throws IOException {
Activity activity = new Activity();
activity.setRName(this.getName());
activity.setRZdcollege(this.getZdcollege());
activity.setRType(this.getType());
activity.setRItem(this.getItem());
activity.setRCredit(this.getCredit());
activity.setRMaximum(this.getPeopleNum());
activity.setRStartTime(startTime1);
activity.setREndTime(endTime1);
activity.setRStartTimeTwo(startTime2);
activity.setREndTimeTwo(endTime2);
//System.out.println("newActivity"+this.getFkTeacherId());
if (teacherDao.isExist(this.getFkTeacherId()) != null)
activity.setRTId(this.getFkTeacherId());
else
activity.setRTId("770066");
activity.setRAddress(this.getAddressId());
activity.setRIntroduction(this.getDesc());
activity.setRNowmum(0);
activity.setRPopular(0);
activity.setRSearchnum(0);
activity.setRClicknum(0);
activity.setRTu(5);
activity.setRRecsign(0);// 初始时为不推荐活动
switch (this.getCollege()) {
case "1":
activity.setRCollege("全部学院");
break;
case "2":
activity.setRCollege("之江学院");
break;
case "3":
activity.setRCollege("信息学院");
break;
case "4":
activity.setRCollege("人文学院");
break;
case "5":
activity.setRCollege("商学院");
break;
case "6":
activity.setRCollege("设计学院");
break;
case "7":
activity.setRCollege("外国语学院");
break;
case "8":
activity.setRCollege("机械学院");
break;
case "9":
activity.setRCollege("中旅学院");
break;
case "10":
activity.setRCollege("建筑学院");
break;
case "11":
activity.setRCollege("理学院");
break;
case "12":
activity.setRCollege("创新创业学院");
break;
default:
break;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateNowStr = sdf.format(new Date());//string转时间
activity.setRCreateTime(Timestamp.valueOf(dateNowStr));
activity.setRChangeTime(Timestamp.valueOf(dateNowStr));
activity.setRStatus(2);
// 上传图片
if (file1 != null) {
String path = ServletActionContext.getRequest().getRealPath(
"/image");
// 获取后缀名字
String hz = file1FileName.substring(file1FileName.lastIndexOf("."));
String newfilename = UUID.randomUUID().toString() + hz;// uuid不重复;
OutputStream os = new FileOutputStream(new File(path, newfilename));//准备好一个输出对象
String h = "http://localhost:8080/SDSYwZDL/image/" + newfilename;//图片的路径
activity.setRPicture(h);
InputStream is = new FileInputStream(file1);
byte[] buf = new byte[1024];
int length = 0;
while (-1 != (length = is.read(buf))) {
os.write(buf, 0, length);
}
PhotoYsImp p = new PhotoYsImp();
p.photoYs(path + "/" + newfilename, 400, 400);// 对图片进行压缩。
is.close();
os.close();
} else {
activity.setRPicture("https://sdsy.zzjc.edu.cn/SDSYw/image/1.jpg");
}
activityDao.addActivity(activity);
return "success";
}
25、在web.util中增加PhotoYsImp 类
package web.util;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class PhotoYsImp {
private Image img;
private int width;
private int height;
private String path;
public void photoYs(String fileName, int w, int h) throws IOException {
path = fileName;
File file = new File(fileName);// 锟斤拷锟斤拷锟侥硷拷
img = ImageIO.read(file); // 锟斤拷锟斤拷Image锟斤拷锟斤拷
width = img.getWidth(null); // 锟矫碉拷源图锟斤拷
height = img.getHeight(null); // 锟矫碉拷源图锟斤拷
if (width / height > w / h) {
resizeByWidth(w);
} else {
resizeByHeight(h);
}
}
public void resizeByWidth(int w) throws IOException {
int h = (int) (height * w / width);
resize(w, h);
}
public void resizeByHeight(int h) throws IOException {
int w = (int) (width * h / height);
resize(w, h);
}
public void resize(int w, int h) throws IOException {
// SCALE_SMOOTH 鍘嬬缉鏈哄埗
BufferedImage image = new BufferedImage(w, h,
BufferedImage.SCALE_SMOOTH);
image.getGraphics().drawImage(img, 0, 0, w, h, null);
File destFile = new File(path);
FileOutputStream out = new FileOutputStream(destFile);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
out.close();
}
}
26、运行项目可以成功发布活动