需求是用户可以在页面管理展示的字段,并且对字段的展示顺序自定义排序,控制所有字段显示隐藏,表中有默认基础字段是不可以删除的

这边全部都是后端实现:

思路:

数据表设定一个字段专门存放动态字段,字段内容以JSON的格式k-v形式存放

建立字段管理表,设置code码,名称,排序

查询接口将对象根据字段顺序转换成map返回

伪代码:

字段管理

public class StaffManager implements Serializable {

@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

private Integer id;

@Column(name = "name", length = 32)

private String name;

@ApiParam(value = "排序")

private Integer sorts;

@ApiParam(value = "代表字段")

private String code;

@ApiParam(value = "是否展示")

private Boolean isShow;

}

@ApiParam(value = "自定义字段")

private String customFields;

/**

* 定义字段

*

* @param content [{"name":"xx", "sorts":"", "code":"name", "isShow":"true"}...]

*/

public void update(String content) {

//清空数据表

dao.truncate();

JSONArray array = JSONObject.parseArray(content);

for (int i = 0; i < array.size(); i++) {

StaffManager staffManager = JSONObject.toJavaObject((JSONObject)array.get(i), StaffManager.class);

if (StringUtil.isEmpty(staffManager.getCode())) {

//设置扩展字段的名称

staffManager.setCode("extend_" + UUIDUtil.getCode());

}

staffManager.setSorts(i);

//保存对象。。。

}

}

/**

* 新增用户

*

* @param content 扩展字段 [{"code":"xx", "value":""}]

* extend

*/

public void insert(Integer id, String name, String tel, Integer classId,

Integer deptId, String tagCode, String content) {

if (StringUtil.isNotEmpty(content)){

JSONArray array = JSONObject.parseArray(content);

List> list = Lists.newArrayList();

for (Object o : array) {

Mapreq = JSONObject.toJavaObject((JSONObject)o, Map.class);

req.forEach((k,v)->{

//判断是否存在该字段

StaffManager manager = dao.findByCode(k);

if (manager != null){

list.add(req);

}

});

}

String s = JSON.toJSONString(list);

//保存列表对象。。。

}

}

最后查询排序结果

public MappageVagueStaff2(Integer num, Integer size, String content) {

//分页获取到列表对象。。。

Page= ...

List> list = Lists.newArrayList();

//设置对比集合表头 并排序

Listtitles = staffManagerService

.findAll()

.stream()

.sorted(Comparator.comparing(StaffManager::getSorts, Comparator.nullsLast(Integer::compareTo)))

.collect(Collectors.toList());

ListstaffList = staff.getContent();

staffList.forEach(x->{

MaphashMap = new LinkedHashMap<>(16);

//将原对象转换成Map

Mapmap = ...

//根据列表字段和顺序设置

titles.forEach(u->{

String code = u.getCode();

String substring = code;

if (code.contains(SPLIT)){

substring = code.substring(0, code.indexOf(SPLIT));

}

Object o = map.get(substring);

//根据顺序设置值

hashMap.put(substring, o);

});

//每个对象顺序重排后 设置扩展字段的值

String customFields = x.getCustomFields();

JSONArray array = JSONObject.parseArray(customFields);

if (array != null && array.size() > 0){

for (Object o : array) {

MapjsonMap = JSONObject.toJavaObject((JSONObject)o, Map.class);

//判断是否是是存在的字段

jsonMap.forEach((k,v)->{

if (hashMap.containsKey(k)){

hashMap.put(k, v);

}

});

}

}

list.add(hashMap);

});

Mapmap = Maps.newHashMap();

map.put("pageMax", staff.getTotalElements());

map.put("data", list);

map.put("title", titles);

return map;

}

java动态字段排序_JAVA 列表动态增加字段显示和任意字段排序相关推荐

  1. java集合根据值排序_Java 8:对集合中的值进行排序

    java集合根据值排序 意识到Java 8将在接下来的几周内发布其GA版本之后,我认为现在是时候来看看它了,在过去的一周里,我一直在阅读Venkat Subramaniam的书 . 我要讲的是第3章, ...

  2. java sql 排序_JAVA像SQL一样对List对象集合进行排序

    在开始之前,我先卖个关子提一个问题:假设我们有一个Movie类,这个类有三个成员变量分别是starred(是否收藏), title(电影名称), rating(评分).你知道怎么对一个Movie对象组 ...

  3. java 动态读取文件_Java窗体动态加载磁盘文件的实现方法

    在使用图形界面操作系统时,当打开一个文件夹系统会自动列出该文件夹下的所有文件及子文件夹.本实例实现了类似的功能:首先让用户选择一个文件夹,程序会动态列出该文件夹下的所有文件:如果该文件是隐藏文件,就在 ...

  4. 动态性是Java的特性吗_Java的动态特性有哪些?

    Java的动态特性有两种,一是隐式的:另一种是显示的.隐式的(implicit)方法就是当程式设计师用到new 这个Java 关键字时,会让类别载入器依需求载入您所需要的类别,这种方式使用了隐式的(i ...

  5. Java调用动态库 缺点_java调用动态库(dll)的一些问题

    javac 1)dos切换到java文件所在目录,使用javac编译出class文件 javah的一些问题: 1)切换到src目录下 2)设置路径命令:set classpath=src目录的完全路径 ...

  6. java 集合 总结 表_java 列表与集合总结

    列表与集合 (一切输出都用for each!丢弃迭代器) 列表List 1顺序表 Arraylist  适用于静态查找 2   链式双向表 Linkedlist 适用于增删该查 3 (容器) Vect ...

  7. java的hashmap排序_Java面试题:如何对HashMap按键值排序

    Java中HashMap是一种用于存储"键"和"值"信息对的数据结构.不同于Array.ArrayList和LinkedLists,它不会维持插入元素的顺序. ...

  8. java 创建组合框_java列表框和组合框中的Swing如何使用

    列表框和组合框在Swing中工作就像它们在老的AWT中工作一样,但如果我们需要它,它们同样被增加功能.另外,它也更加的方便易用.例如,JList中有一个显示String数组的构建器(奇怪的是同样的功能 ...

  9. java集合对象排序_java ArrayList集合中的某个对象属性进行排序的实现代码

    开发中有时候需要自己封装分页排序时,List如何对某一属性排序呢,分享一个小实例,大家共勉,希望能对大家有用,请多多指教. 1.Student的Bean如下: public class Student ...

最新文章

  1. “;“分号空语句的使用
  2. Building and running Node.js for Android
  3. 《memory leak: stackwalk》
  4. as2 AVM1对象和as3对象的通信
  5. Effective Objective-C 2.0 编写高质量iOS与OS X代码的52个有效方法笔记-协议与分类...
  6. 第十二章、LNMP架构(中)
  7. Ubuntu 14.04 安装Octave
  8. for path多行变一列
  9. 防计算机病毒的重点,计算机病毒防范技术重点措施(1).doc
  10. 中职学校计算机课听课记录表,中职语文听课记录10篇
  11. 正则表达式语法及例子
  12. 从源码分析Redis分布式锁的原子性保证
  13. 波士顿大学研究生计算机科学专业排名,USnews2012美国大学排名计算机科学专业研究生排名...
  14. “刘畊宏女孩”掀起居家云健身热潮,海外健身市场引流变现新方向?
  15. 2021J - Circular Billiard Table
  16. php去除换行(回车换行)的三种方法
  17. nextcloud+onlyoffice 打开wps方法,亲测方案。
  18. DM365 linux内核文件系统的烧写步骤及其uboot参数配置
  19. 基于用户乘车行为大数据的客流分析及预测模型
  20. oracle高级函数去重,傅老师课堂:Oracle高级应用之去重聚合函数

热门文章

  1. 本地方法中printf如何传给java--java系统级命名管道
  2. 【架构】技术-工具-平台-语言框架
  3. 著名站点的爬虫 —— 豆瓣
  4. IEnumerable和IEnumerator 详解
  5. 【剑指Offer】俯视50题之31 - 40题
  6. (转)start_kernel 代码分析
  7. 开机logo切换逻辑深入研究
  8. 写一个函数返回参数二进制中 1 的个数
  9. XMLHttpRequest
  10. 51CTO手機軟件有病毒? 有網絡安全的高手嗎?