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后端开发人才_求职:Ja