1大家在开发的时候,前端处理父子处理存在级联关系的下拉框,或者展示数据时以父子形式展示,如果级联的数据比较多,处理起来效率不高,还比较麻烦,
如果后端在返回list数据时,能够将父子关系处理好返回,这样前端处理起来就简单,开发效率也就高了。
2所以搞了一个小工具,直接上源码,如果看不懂可以自己去检验一下就明白原理了。
//model实体
public class SysOrg implements Serializable {
/**
*
*/
private static final long serialVersionUID = 9133631499822051115L;
private Long id;
private Long pid;
private String orgName;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getPid() {
return pid;
}
public void setPid(Long pid) {
this.pid = pid;
}
public String getOrgName() {
return orgName;
}
public void setOrgName(String orgName) {
this.orgName = orgName;
}
}
//构建的下拉菜单model
public class DropdownItem implements Serializable {
/**
*
*/
private static final long serialVersionUID = -631110845195677461L;
/**
* 显示标签
*/
private String label;
/**
* 选中值
*/
private Object value;
/**
* 子项
*/
private List<DropdownItem> children = new ArrayList<DropdownItem>();
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public Object getValue() {
return value;
}
public void setValue(Object value) {
this.value = value;
}
public List<DropdownItem> getChildren() {
return children;
}
public void setChildren(List<DropdownItem> children) {
this.children = children;
}
}
/**
* 下拉数据构建工具,将查询到的list转换成下拉数据的工具类,只需要传入list,设置labelField,valueField,parentField可选
*
*/
public class DropdownBuilder {
/**
* 下拉数据
*/
@SuppressWarnings("rawtypes")
private List list;
/**
* 内容字段
*/
private String labelField;
/**
* 值字段
*/
private String valueField;
/**
* 构建子项字段
*/
private String parentField;
private DropdownBuilder() {}
public static DropdownBuilder create() {
return new DropdownBuilder();
}
@SuppressWarnings("rawtypes")
public DropdownBuilder setList(List list) {
this.list = list;
return this;
}
public DropdownBuilder setLabelField(String labelField) {
this.labelField = labelField;
return this;
}
public DropdownBuilder setValueField(String valueField) {
this.valueField = valueField;
return this;
}
public DropdownBuilder setParentField(String parentField) {
this.parentField = parentField;
return this;
}
/**
* 构建下拉菜单数据
*
* @return
*/
public List<DropdownItem> build() {
if (CollectionUtils.isEmpty(list)) {
return Collections.emptyList();
}
List<DropdownItem> rtnList = new ArrayList<DropdownItem>();
try {
Map<String, DropdownItem> map = new HashMap<String, DropdownItem>();
for (Object obj : list) {
String label = BeanUtils.getProperty(obj, labelField);//根据定义的lableFiled(比如id)取sysorg对象中id值作为DropdownItem中的labe
if (StringUtils.isEmpty(label)) {
//ExceptionUtils.wrapBusiException("{}标签值不能为空", labelField);
}
String value = BeanUtils.getProperty(obj, valueField);//取orgName属性值作为DropdownItem中的value值
if (StringUtils.isEmpty(value)) {
//ExceptionUtils.wrapBusiException("{}值不能为空", valueField);
}
String parent = null;
if (StringUtils.isNotEmpty(parentField)) {
parent = BeanUtils.getProperty(obj, parentField);
}
DropdownItem item = new DropdownItem();
item.setLabel(label);
item.setValue(value);
map.put(value, item);
if (StringUtils.isNotEmpty(parent)) {
DropdownItem parentItem = map.get(parent);
if (parentItem != null) {
parentItem.getChildren().add(item);
} else {
rtnList.add(item);
}
} else {
rtnList.add(item);
}
}
} catch (Exception e) {
//ExceptionUtils.marshException(ICommonResponse.FAIL_CODE, "获取下拉属性错误", e);
}
return rtnList;
}
}
public static void main(String[] args) {
List<SysOrg> list = new ArrayList<SysOrg>();
SysOrg org1 = new SysOrg();
org1.setId(1L);
org1.setOrgName("测试1");
org1.setPid(0L);
list.add(org1);
SysOrg org2 = new SysOrg();
org2.setId(2L);
org2.setOrgName("测试2");
org2.setPid(1L);
list.add(org2);
SysOrg org3 = new SysOrg();
org3.setId(3L);
org3.setOrgName("测试3");
org3.setPid(0L);
list.add(org3);
SysOrg org4 = new SysOrg();
org4.setId(4L);
org4.setOrgName("测试4");
org4.setPid(2L);
list.add(org4);
List<DropdownItem> ddl = DropdownBuilder.create().setList(list).setLabelField("orgName").setValueField("id").setParentField(" pid").build();
System.out.print(JSON.toJSONString(ddl, true));
}
3测试结果
4看结果是不是很清晰明了,可以自己测试一下,原理其就明白了了
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/14848.html