1) 使用步骤:导入formSelects,将资料中的《layui-formSelects-master.zip》解压并导入dist目录中的核心js和css到项目的指定路径中

按照该层级结构把js放进去

2)在页面中引入核心JS和CSS
引入js
let $,formSelects;
layui.use(['jquery','formSelects'],function(){
$=layui.jquery,formSelects=layui.formSelects;
formSelects.btns('canyuze', ['select', 'remove', 'reverse']);
})
页面引入
<!-- 引入formSelects核心css -->
<link rel="stylesheet" href="${pageContext.request.contextPath }/static/js/plugins/formSelects/formSelects-v4.css" />
<!-- 引入formSelects核心js -->
<script src="${pageContext.request.contextPath }/static/js/plugins/formSelects/formSelects-v4.js" type="text/javascript" charset="utf-8"></script>
效果

3)定义formSelects组件及表单验证设置
官方文档本地绑数据

把实例放进项目js
let $,formSelects;
layui.use(['jquery','formSelects'],function(){
$=layui.jquery,formSelects=layui.formSelects;
//添加多功能下拉框
formSelects.btns('canyuze', ['select', 'remove', 'reverse']);
formSelects.btns('liexize', ['select', 'remove', 'reverse']);
//local模式
formSelects.data('canyuze', 'local', {
arr: [
{"name": "分组-1", "type": "optgroup"},
{"name": "北京", "value": 1},
{"name": "上海", "value": 2},
{"name": "分组-2", "type": "optgroup"},
{"name": "广州", "value": 3},
{"name": "深圳", "value": 4},
{"name": "天津", "value": 5}
]
});
})
效果

4)初始化formSelects
let formSelects;
layui.use(['formSelects'],function(){
formSelects=layui.formSelects;
//必须进行初始化操作
formSelects.btns('liexize', ['select', 'remove', 'reverse']);
formSelects.btns('canyuze', ['select', 'remove', 'reverse']);
});
5)动态绑定数据(后台列席者和参与者接口定义及测试)
let data=doAjax("userAction.action",{
methodName:'queryUserAll'
});
formSelects.data('liexize', 'local',{arr:data.data});
formSelects.data('canyuze', 'local',{arr:data.data});
注:
后台数据JSON格式必须是:{name:‘’,value:‘’},如果不喜欢name,value可以使用config重新定义!!!
我们直接去官网看实例

源代码

引入到项目js
let $,formSelects,laydate;
layui.use(['jquery','formSelects','laydate'],function(){
$=layui.jquery,
laydate=layui.laydate,
formSelects=layui.formSelects;
//添加多功能下拉框
formSelects.btns('canyuze', ['select', 'remove', 'reverse']);
formSelects.btns('liexize', ['select', 'remove', 'reverse']);
$.getJSON("user.action",{methodName:"queryUserAll"},function(rs){
console.log(rs);
//local模式
formSelects.data('canyuze', 'local', {
arr: rs.data
});
formSelects.data('liexize', 'local', {
arr: rs.data
});
});
//日期时间范围
laydate.render({
//#dt事件范围的id
elem: '#dt'
,type: 'datetime'
,range: true
});
});
效果

定义时间端格式

我们把中间的-换成至
//日期时间范围
laydate.render({
//#dt事件范围的id
elem: '#dt'
,type: 'datetime'
,range: '至'
});

到官网查看如何提交表单

//监听提交
form.on('submit(meeting)', function(data){
layer.alert(JSON.stringify(data.field), {
title: '最终的提交信息'
})
return false;
});
我们打印一下data(点击提价按钮)

要用到的数据表t_oa_meeting_info

所有我们要建立一个实体类MeetingInfo.java
package com.xlb.entity;
import java.util.Date;
public class MeetingInfo {
private Long id;
private String title;
private String content;
private String canyuze;
private String liexize;
private String zhuchiren;
private String location;
private Date startTime;
private Date endTime;
private String fujian;
private Integer state;
private String seatPic;
private String remark;
private String auditor;
public String getAuditor() {
return auditor;
}
public void setAuditor(String auditor) {
this.auditor = auditor;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getCanyuze() {
return canyuze;
}
public void setCanyuze(String canyuze) {
this.canyuze = canyuze;
}
public String getLiexize() {
return liexize;
}
public void setLiexize(String liexize) {
this.liexize = liexize;
}
public String getZhuchiren() {
return zhuchiren;
}
public void setZhuchiren(String zhuchiren) {
this.zhuchiren = zhuchiren;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
public String getFujian() {
return fujian;
}
public void setFujian(String fujian) {
this.fujian = fujian;
}
public Integer getState() {
return state;
}
public void setState(Integer state) {
this.state = state;
}
public String getSeatPic() {
return seatPic;
}
public void setSeatPic(String seatPic) {
this.seatPic = seatPic;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public MeetingInfo() {
super();
// TODO Auto-generated constructor stub
}
@Override
public String toString() {
return "MeetingInfo [id=" + id + ", title=" + title + ", content=" + content + ", canyuze=" + canyuze
+ ", liexize=" + liexize + ", zhuchiren=" + zhuchiren + ", location=" + location + ", startTime="
+ startTime + ", endTime=" + endTime + ", fujian=" + fujian + ", state=" + state + ", seatPic=" + seatPic + ", remark=" + remark + "]";
}
}
dao层MeetingInfoDao.java
package com.xlb.dao;
import java.util.List;
import com.xlb.entity.MeetingInfo;
import com.zking.util.BaseDao;
import com.zking.util.PageBean;
public class MeetingInfoDao extends BaseDao<MeetingInfo>{
//会议信息新增
public int add (MeetingInfo t) throws Exception {
String sql = "insert into t_oa_meeting_info(title,content,canyuze,liexize,zhuchiren,location,starTime,endTime,remark) values(?,?,?,?,?,?,?,?,?)";
return super.executeUpdate(sql, t, new String[] {"title","content","canyuze","liexize","zhuchiren","location","starTime","endTime","remark"});
}
}
action层MeetingInfoAction.java
package com.xlb.web;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.xlb.dao.MeetingInfoDao;
import com.xlb.entity.MeetingInfo;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriver;
import com.zking.util.R;
import com.zking.util.ResponseUtil;
public class MeetingInfoAction extends ActionSupport implements ModelDriver<MeetingInfo>{
private MeetingInfo info = new MeetingInfo();
private MeetingInfoDao infoDao = new MeetingInfoDao();
@Override
public MeetingInfo getModel() {
return info;
}
//用户新增
public String add(HttpServletRequest req, HttpServletResponse resp) {
try {
//rs是影响行数
int rs = infoDao.add(info);
if(rs > 0) {
ResponseUtil.writeJson(resp, R.ok(200, "会议信息新增成功"));
}
else {
ResponseUtil.writeJson(resp, R.error(0, "会议信息新增失败"));
}
} catch (Exception e) {
e.printStackTrace();
try {
ResponseUtil.writeJson(resp, R.error(0, "会议信息新增失败"));
} catch (Exception e1) {
e1.printStackTrace();
}
}
return null;
}
}
配置mvc
<?xml version="1.0" encoding="UTF-8"?>
<config>
<action path="/user" type="com.xlb.web.UserAction">
</action>
<action path="/permission" type="com.xlb.web.PermissionAction">
</action>
<action path="/info" type="com.xlb.web.MeetingInfoAction">
</action>
</config>
到这我们运行会报错
因为String不能转为data
那么我们就用一个工具类转
@Override
public MeetingInfo getModel() {
//注册一个转换器
ConvertUtils.register(new MyDateConverter(), Date.class);
return info;
}
工具类SimpleDateFormat
package com.zking.util;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.beanutils.Converter;
public class MyDateConverter implements Converter {
@Override
public Object convert(Class type, Object value) {
String dateStr = (String)value;
SimpleDateFormat spdt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date = spdt.parse(dateStr);
return date;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
搭建好后端后我们把时间端分割开
//监听提交
form.on('submit(meeting)', function(data){
let rs=data.field;
//将原有的时间区间范围进行处理,拿到开始时间结束时间,并且去空格,放入Json对象rs中
rs["startTime"]=rrs.dt.split('至')[0].trim;
rs["endTime"]=rrs.dt.split('至')[1].trim;
rs["methodName"]="add";
//打印拿到的数据
console.log(rs);
return false;
});
打印结果

然后我们利用post传输运行提示
$.post("info.action",rs,function(res){
console.log(rs);
if(res.success){
layer.msg(res.msg,{icon:6},function(){});
}else{
layer.msg(res.msg,{icon:5},function(){});
}
},"json")
return false;
});
结果
