当前位置: 首页 > news >正文

电商类网站怎么做 seoseo网站自动发布外链工具

电商类网站怎么做 seo,seo网站自动发布外链工具,政府网站建设的意义,网站备案工作今天接到一个优化需求,表格导出后的表头顺序和页面不一致,要优化成一致的。根据传入的字段,动态导出数据,并保证顺序。 我看到导出的实体类都有ExcelProperty注解,同时也在官网查看了这注解的含义和使用。 ExcelPrope…

今天接到一个优化需求,表格导出后的表头顺序和页面不一致,要优化成一致的。根据传入的字段,动态导出数据,并保证顺序。
我看到导出的实体类都有@ExcelProperty注解,同时也在官网查看了这注解的含义和使用。

@ExcelProperty有两个属性可以帮我们排序:index和order,所以我就想每次在去写excel的时候,对映射类字段的index去动态排序。
注意index的使用

  • index的值相同时会抛出异常
  • index的值不连续时会插入空白列

然后想直接用反射动态修改index

    /**** @param headList 前端上送的动态表头* @param clazz 导出实体类的class对象*/private static void handleExcelHead(List<String> headList, Class<?> clazz) {try {for (String excelHead : headList) {Field declaredField = clazz.getDeclaredField(excelHead);ExcelProperty annotation = declaredField.getAnnotation(ExcelProperty.class);InvocationHandler invocationHandler = Proxy.getInvocationHandler(annotation);Field field = invocationHandler.getClass().getDeclaredField("memberValues");field.setAccessible(true);Map<String, Object> memberValues = (Map<String, Object>) field.get(invocationHandler);memberValues.put("index", headList.indexOf(excelHead));}}catch (Exception e){e.printStackTrace();}}

完整代码如下:

public class Test {public static void main(String[] args) throws Exception {List<String> headList = new ArrayList<>();headList.add("name");headList.add("sex");headList.add("age");// 动态处理表头handleExcelHead(headList,User.class);EasyExcel.write("test.xlsx").head(User.class).sheet("test").includeColumnFiledNames(headList).doWrite(init());}/**** @param headList 前端上送的动态表头* @param clazz 导出实体类的class对象*/private static void handleExcelHead(List<String> headList, Class<?> clazz) {try {for (String excelHead : headList) {Field declaredField = clazz.getDeclaredField(excelHead);ExcelProperty annotation = declaredField.getAnnotation(ExcelProperty.class);InvocationHandler invocationHandler = Proxy.getInvocationHandler(annotation);Field field = invocationHandler.getClass().getDeclaredField("memberValues");field.setAccessible(true);Map<String, Object> memberValues = (Map<String, Object>) field.get(invocationHandler);memberValues.put("index", headList.indexOf(excelHead));}}catch (Exception e){e.printStackTrace();}}private static List<User> init() {List<User> userList = new ArrayList<>();for (int i = 0; i < 10; i++) {User user = new User();user.setName("test"+i);user.setSex("男");user.setAge(20 + i);userList.add(user);}return userList;}
}

代码运行后发现和预期结果一样。但是当我则调整表头顺序并增加表头后发现不生效了。后来debug发现由于使用的是class对象,只要这个jvm不重启或者这个对象不被回收修改的index就一直存在,所以我们每次应该把index恢复成默认值。但是发现还是不行。后来在想这框架应该是使用了缓存吧,毕竟导出实体是固定的。果然:

ClassUtils 这里使用了缓存

    public static final Map<Class<?>, FieldCache> FIELD_CACHE = new ConcurrentHashMap<>();private static FieldCache declaredFields(Class<?> clazz) {if (clazz == null) {return null;}return FIELD_CACHE.computeIfAbsent(clazz, key -> {List<Field> tempFieldList = new ArrayList<>();Class<?> tempClass = clazz;// When the parent class is null, it indicates that the parent class (Object class) has reached the top// level.while (tempClass != null) {Collections.addAll(tempFieldList, tempClass.getDeclaredFields());// Get the parent class and give it to yourselftempClass = tempClass.getSuperclass();}// Screening of fieldMap<Integer, List<Field>> orderFieldMap = new TreeMap<Integer, List<Field>>();Map<Integer, Field> indexFieldMap = new TreeMap<Integer, Field>();Map<String, Field> ignoreMap = new HashMap<String, Field>(16);ExcelIgnoreUnannotated excelIgnoreUnannotated = clazz.getAnnotation(ExcelIgnoreUnannotated.class);for (Field field : tempFieldList) {declaredOneField(field, orderFieldMap, indexFieldMap, ignoreMap, excelIgnoreUnannotated);}return new FieldCache(buildSortedAllFieldMap(orderFieldMap, indexFieldMap), indexFieldMap, ignoreMap);});}

这下难住我了,这个缓存也不刷新。后来想他把缓存放在map里,key是Class,我直接每次都给他remove不就可以了。加了一行代码放在处理表头前边,果然可行!

ClassUtils.FIELD_CACHE.remove(User.class);
http://www.zhongyajixie.com/news/40690.html

相关文章:

  • 做公司的网站的需求有哪些内容寰宇seo
  • 北京网站建设公司 蓝纤科技优化师是干嘛的
  • 各国网站的域名网站推广软件免费观看
  • 怎样做公司网站banner全国疫情最新报告
  • 怎么免费建个免费的站点长春seo排名公司
  • 如何给网站增加内链seo是什么职位的简称
  • wordpress主题带会员中心c盘优化大师
  • 太原网站建设收录是什么意思
  • 织梦wap网站北京seo薪资
  • 网站做自适应好不好网络营销品牌策划
  • 建一个淘宝客网站要多少钱seo网站优化优化排名
  • 西安免费网站制作电商运营方案
  • 上海网站建设webmeng营销培训视频课程免费
  • 最炫表白网站html5源码游戏代理免费加盟
  • 工控界面设计专业seo网络推广
  • 企业网站备案条件软文推广代理
  • 品牌推广方案ppt整站优化
  • 网站设计首页框架图片电商网站运营
  • 嵊州哪里可以做网站广东东莞大益队
  • 网站设置地图北京网站搭建哪家好
  • 网站图片地址怎么做自己建网页
  • 做的比较好的设计公司网站什么公司适合做seo优化
  • 网站建设百度贴吧百度广告联盟网站
  • 企业网站和信息化建设制度爱站网站长百度查询权重
  • 中宣部网站政治建设站长统计app软件下载2021
  • 做网站设计google海外推广
  • 用织梦做的网站怎么管理系统百度导航最新版本下载安装
  • 哪里有做网站推广云搜索引擎
  • 重庆网站建设吧泰安seo
  • 企业网站建设 会计分录如何制作个人网站