java动态字段排序_JAVA 列表动态增加字段显示和任意字段排序
需求是用户可以在页面管理展示的字段,并且对字段的展示顺序自定义排序,控制所有字段显示隐藏,表中有默认基础字段是不可以删除的
这边全部都是后端实现:
思路:
数据表设定一个字段专门存放动态字段,字段内容以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;
}
《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读总结
以上是生活随笔为你收集整理的java动态字段排序_JAVA 列表动态增加字段显示和任意字段排序的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: java不可变量有哪些_5.Java变量
- 下一篇: java自定义日志级别_自定义log4j