java 日程日历_dhtmlxscheduler日历日程控件使用
最近项目需要做一个会议日程安排的功能,通过日历控件查询日程安排。找到了dhtmlxScheduler这个控件,java下的官方网站http://javaplanner.com/docs/index.html ,最终效果是这样的:
由于网上关于这个控件的中文资料比较少,分享自己经验供同样需求的人使用。
项目框架是spring MVC + hibernate,使用此控件方法如下:
首先是准备工作,下载并导入各种相关的包:dhtmlxScheduler library files (控件的js/css文件);
javaplanner.jar file (you can download it here).
然后,处理需要在控件中显示的日程,分为两部分:建立表结构和定义对应实体类。日程bean(即上图表示Event的类,在我的项目中是会议Meeting类)继承DHXEvent类,日程类会继承DHXEvent类中的四个变量,分别是id,start_date,end_date,text,id为整型。
Meeting.java
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.NotFound;
import org.hibernate.annotations.NotFoundAction;
import org.hibernate.search.annotations.Analyze;
import org.hibernate.search.annotations.DateBridge;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Resolution;
import org.hibernate.search.annotations.Store;
import org.hibernate.validator.constraints.Length;
import com.dhtmlx.planner.DHXEvent;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.thinkgem.jeesite.common.persistence.DataEntity;
import com.thinkgem.jeesite.modules.sys.entity.User;
import com.thinkgem.jeesite.modules.sys.utils.UserUtils;
/**
* @author MuQiong
* Class Description
* 会议实体
*/
@Entity
@Table(name = "oa_meeting")
@DynamicInsert @DynamicUpdate
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Meeting extends DHXEvent {
private static final long serialVersionUID = 1L;
private User user;//创建用户
private Room room;//会议房间
//private String text;//会议主题
private String description;//会议描述
private String status;//处理状态
private String location;//和平里or二基地
private String opinion;//审批意见
private int attendance;//参会人数
private User createBy;// 创建者
private Date createDate;// 创建日期
private User updateBy;// 更新者
private Date updateDate;// 更新日期
private String delFlag; // 删除标记(0:正常;1:删除;2:审核)
public Meeting(){
super();
this.delFlag = DataEntity.DEL_FLAG_NORMAL;
}
public Meeting(int id){
this();
this.id = id;
this.delFlag = DataEntity.DEL_FLAG_NORMAL;
}
public Meeting(int id, User user, Room room){
this(id);
this.user = user;
this.room = room;
this.delFlag = DataEntity.DEL_FLAG_NORMAL;
}
@PrePersist
public void prePersist(){
User user = UserUtils.getUser();
if (StringUtils.isNotBlank(user.getId())){
this.updateBy = user;
this.createBy = user;
}
this.updateDate = new Date();
this.createDate = this.updateDate;
}
@PreUpdate
public void preUpdate(){
User user = UserUtils.getUser();
if (StringUtils.isNotBlank(user.getId())){
this.updateBy = user;
}
this.updateDate = new Date();
}
public void setId(int id){
this.id = id;
}
@Id
@GenericGenerator(name = "idGenerator", strategy = "increment")
@GeneratedValue(generator = "idGenerator")
public Integer getId(){
return id;
}
public void setUser(User user){
this.user = user;
}
@ManyToOne
@JoinColumn(name="user_id")
@NotFound(action = NotFoundAction.IGNORE)
@NotNull
public User getUser(){
return user;
}
public void setRoom(Room room){
this.room = room;
}
@ManyToOne
@JoinColumn(name="room_id")
@NotFound(action = NotFoundAction.IGNORE)
@NotNull
public Room getRoom(){
return room;
}
public void setStartDate(Date startDate){
this.start_date = startDate;
}
@Temporal(TemporalType.TIMESTAMP)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
public Date getStartDate(){
return start_date;
}
public void setEndDate(Date endDate){
this.end_date = endDate;
}
@Temporal(TemporalType.TIMESTAMP)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
public Date getEndDate(){
return end_date;
}
public void setTitle(String title){
this.text = title;
}
@Column(name = "text")
public String getTitle(){
return text;
}
public void setDescription(String description){
this.description = description;
}
public String getDescription(){
return description;
}
public void setStatus(String status){
this.status = status;
}
public String getStatus(){
return status;
}
public void setLocation(String location){
this.location = location;
}
public String getLocation(){
return location;
}
public void setOpinion(String opinion){
this.opinion = opinion;
}
public String getOpinion(){
return opinion;
}
public void setAttendance(int attendance){
this.attendance = attendance;
}
public int getAttendance(){
return this.attendance;
}
@JsonIgnore
@ManyToOne(fetch=FetchType.LAZY)
@NotFound(action = NotFoundAction.IGNORE)
public User getCreateBy() {
return createBy;
}
public void setCreateBy(User createBy) {
this.createBy = createBy;
}
@Temporal(TemporalType.TIMESTAMP)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
@JsonIgnore
@ManyToOne(fetch=FetchType.LAZY)
@NotFound(action = NotFoundAction.IGNORE)
public User getUpdateBy() {
return updateBy;
}
public void setUpdateBy(User updateBy) {
this.updateBy = updateBy;
}
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Field(index=Index.YES, analyze=Analyze.NO, store=Store.YES)
@DateBridge(resolution = Resolution.DAY)
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
@Length(min=1, max=1)
@Field(index=Index.YES, analyze=Analyze.NO, store=Store.YES)
public String getDelFlag() {
return delFlag;
}
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
}
数据库用的mySQL:CREATE TABLE oa_meeting
(
id int(64) NOT NULL COMMENT '编号',
user_id varchar(64) NOT NULL COMMENT '创建用户编号',
room_id varchar(64) NOT NULL COMMENT '会议房间编号',
start_date datetime COMMENT '开始时间',
end_date datetime COMMENT '结束时间',
text varchar(64) COMMENT '会议主题',
description varchar(64) COMMENT '会议描述',
status varchar(64) COMMENT '处理状态',
location varchar(64) COMMENT '会议室区域',
opinion varchar(64) COMMENT '审批意见',
attendance int(32) COMMENT '参会人数',
create_by varchar(64) COMMENT '创建者',
create_date datetime COMMENT '创建时间',
update_by varchar(64) COMMENT '更新者',
update_date datetime COMMENT '更新时间',
del_flag char(1) DEFAULT '0' NOT NULL COMMENT '删除标记',
PRIMARY KEY (id)
) COMMENT = '会议室预订表';
下一步,利用hibernate连接数据库,hibernate配置文件和hibernateUtils类如下:hibernate.cfg.xml
hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
false
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/jeesite
root
root
1
org.hibernate.dialect.MySQLDialect
thread
org.hibernate.cache.NoCacheProvider
true
true
true
org.hibernate.connection.C3P0ConnectionProvider
20
5
Test
100
120
1
true
18000
25000
……
……
HibernateUtil.java
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.ImprovedNamingStrategy;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
/**
* @author MuQiong
* @version 2014-9-4 上午11:26:52
* hibernate 工具类 for日历查询
*/
public class HibernateUtil {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
Configuration cfg = new Configuration().setNamingStrategy(
ImprovedNamingStrategy.INSTANCE).configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
.applySettings(cfg.getProperties()).buildServiceRegistry();
return cfg.buildSessionFactory(serviceRegistry);
} catch (Throwable e) {
throw new ExceptionInInitializerError(e);
}
}
private HibernateUtil() {
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
下一步,写一个service类继承DHXEventsManager类,该类负责利用HibernateUtil实现对实体的CRUD功能,这里暂时只完成了读取数据即getEvents方法。MeetingEventsManager.java
/**
* @author MuQiong
* 日历查询会议室预定情况service
*/
@Service
@Transactional(readOnly = true)
public class MeetingEventsManager extends DHXEventsManager {
public MeetingEventsManager(HttpServletRequest request) {
super(request);
}
@Override
public Iterable getEvents() {
Session session = HibernateUtil.getSessionFactory().openSession();
List evs = new ArrayList();
try {
//session.clear();
Criteria criteria = session.createCriteria(Meeting.class);
evs = criteria/*.setCacheMode(CacheMode.IGNORE)*/.list();
// System.out.println(evs.size());
} catch (RuntimeException e) {
e.printStackTrace();
} finally {
session.flush();
session.close();
}
return evs;
}
@Override
@Transactional(readOnly = false)
public DHXStatus saveEvent(DHXEv event, DHXStatus status) {
Session session = HibernateUtil.getSessionFactory().openSession();
try {
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
if (status == DHXStatus.UPDATE)
session.update(event);
else if (status == DHXStatus.DELETE)
session.delete(event);
else if (status == DHXStatus.INSERT)
session.save(event);
session.getTransaction().commit();
} catch (RuntimeException e) {
e.printStackTrace();
} finally {
session.flush();
session.close();
}
return status;
}
@Override
@Transactional(readOnly = false)
public DHXEv createEvent(String id, DHXStatus status) {
return new DHXEvent();
}
}
后台的最后一步也是关键一步,spring的controller类,许多关于控件界面的设置都是在这里完成的,比如说,你可以这样s.calendars.attachMiniCalendar();添加选择日期控件,更多设置请参见http://javaplanner.com/docs/index.html :QueryController.java
/**
* @author MuQiong
* 日历查询controller
*/
@Controller
@RequestMapping(value = "${adminPath}/oa/query")
public class QueryController {
/*
* @Autowired private CustomEventsManager customEventsManager;
*/
@RequestMapping(value = {"list", "/"})
public ModelAndView scheduler(HttpServletRequest request) throws Exception {
DHXPlanner s = new DHXPlanner("/jeesite/static/dhtmlxScheduler/",
DHXSkin.TERRACE);
s.config.setScrollHour(8);
s.setWidth(900);
s.config.setTimeStep(60);
s.config.setFirstHour(8);
s.config.setLastHour(19);
s.config.setLimitTimeSelect(true);
// clear default lightbox fields
s.lightbox.clear();
// contact details field
DHXLightboxText title = new DHXLightboxText("text", "会议主题");
title.setFocus(true);
title.setHeight(40);
s.lightbox.add(title);
// time field
DHXLightboxTime time = new DHXLightboxTime("time", "时长");
s.lightbox.add(time);
s.load("meetings", DHXDataFormat.JSON);
s.data.dataprocessor.setURL("meetings");
ModelAndView mnv = new ModelAndView("modules/oa/queryList");
mnv.addObject("body", s.render());
return mnv;
}
@RequestMapping("/meetings")
@ResponseBody public String meetings(HttpServletRequest request) {
MeetingEventsManager evs = new MeetingEventsManager(request);
return evs.run();
}
}
最后就是前端页面jsp文件了queryList.jsp
以上就完成简单的基本功能了。
如果有什么问题,希望指出。
java 日程日历_dhtmlxscheduler日历日程控件使用相关推荐
- 提供完善的类似于Outlook 2003 Calendar的风格日历日程控件Xtreme Calendar
Xtreme Calendar控件能为 Windows软件开发者提供完善的类似于Outlook 2003 Calendar的风格.Windows开发者能方便的创建可管理指定任务的日程表,对这些任务可按 ...
- 【开源】Winform甘特日程控件GanttPlanner V1.0发布
背景 做过WinForm和Web的朋友们可能都有这个感觉:做用户体验良好的WinForm应用程序要远比Web应用程序困难的多.这是因为Web应用程序毕竟只靠HTML+CSS+JS就能做出各种强大的功能 ...
- vue-lunar-full-calendar日程控件加农历、24节气和中国节假日的功能
依赖包 vue-lunar-full-calendar npm install vue-lunar-full-calendar 即可 例子在 github.com/a306916069/- 上 转载于 ...
- 农历 Android Java 节气_Android自定义日历,可以点击、标注日期、节气、旧历等
/****************从此出开始将代码拷贝到一个文件中*******************/package cc.util.android.view; import java.text. ...
- 如何用Java制作一个简易日历
简易日历制作 记录一下Java实现的一个日历小程序,效果图如下: 实现以上的效果,我们需要用到两个类:SimpleDateFormat和Calendar. 首先看看这两个类的用法: 类 SimpleD ...
- 日历记事本java代码_急需日历记事本JAVA源代码
展开全部 import java.util.Calendar; import javax.swing.*; import java.awt.*; import java.awt.event.*; im ...
- Java实训——桌面日历
java实现<桌面日历>源码,答辩ppt,实习计划书,实习报告下载链接 https://download.csdn.net/download/weixin_43042683/8694956 ...
- 怎么用java做日历_如何用Java制作一个简易日历
简易日历制作 记录一下Java实现的一个日历小程序,效果图如下: 实现以上的效果,我们需要用到两个类:SimpleDateFormat和Calendar. 首先看看这两个类的用法: 类 SimpleD ...
- 利用Java Calendar类打印日历
利用Java Calendar类打印日历 说到日历,我们接触的就多了,每天都在和日历打交道,每年家里都会买日历.那么,大家知道如何用Java打印日历呢?在这里,我说一下如何用Calendar类打印日历 ...
最新文章
- 重学 html の meta 标签
- 3-1 Apache Shiro权限管理框架介绍
- rust tpa_Rust(腐蚀)怎么tp求大神指教。请写在下面
- body div js 放大图片_jquery图片放大插件鼠标悬停图片放大效果
- 使用loadrunner编写webservice接口请求
- W3School 教程整理
- jdbc 通过反射和元数据编写通用的查询对象方法
- PHP 实现文件上传 php配置
- win10 html字体设置,IT之家学院:如何解决Win10屏幕字体缩放模糊问题
- Linux常用软件包
- JavaScript——反转链表
- win10系统安装loadrunner11提示“为了对电脑进行保护,已经阻止此应用”的解决方案
- build constraints exclude all Go file GOland 导入“github.com/gin-gonic/gin“ 报红,
- redis报错:ERR value is not an integer or out of range
- driver: linux下如何模拟按键输入和模拟鼠标
- ILI9341的使用之【五】命令一
- 啥牌子的蓝牙耳机音质好?2023公认音质最好的蓝牙耳机
- Time时间格式化当前时间
- 微信支付官方揭开刷脸支付神秘面纱
- Navicat-数据库的连接以及使用