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

电商类网站怎么做 seogoogle官网下载安装

电商类网站怎么做 seo,google官网下载安装,网站设计说明书,网站导航固定代码今天接到一个优化需求,表格导出后的表头顺序和页面不一致,要优化成一致的。根据传入的字段,动态导出数据,并保证顺序。 我看到导出的实体类都有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.rdtb.cn/news/12233.html

相关文章:

  • 常州个人做网站seo销售好做吗
  • 肇庆网站制作百度的营销策略
  • 芜湖 网站建设aso优化渠道
  • 国外网站内容去哪些平台做镇江网站
  • 嘉峪关网站seo免费cms建站系统
  • 金融网站html5模板通州优化公司
  • 做直播教程的网站有哪些全国疫情最新数据
  • 2017做网站怎么赚钱软文营销文章案例
  • 37网游官网网站优化seo怎么做
  • 周宁县建设局网站百度开户代理公司
  • 西宁网站建设搜q479185700樱桃电视剧西瓜视频在线观看
  • 个人网站如何获得流量seo检测
  • 第一次做网站做后感什么软件可以优化关键词
  • 动态网站模板下载百度免费
  • 无锡网站网络营销专业的就业方向
  • 工具类网站怎么优化seo数据分析网站
  • 网站推广的方法有哪些谷歌广告联盟
  • wix做中文网站怎么样seo值怎么提高
  • 哪家的虚拟主机哪个好seo推广怎么入门
  • 网站程序指的是什么淘宝关键词
  • 搭建公司网站费用搜索引擎调词工具哪个好
  • 网站怎么做友情连接培训课程有哪些
  • 邮件服务器是不是网站服务器武汉seo人才
  • 本地做的网站怎么放到网上去百度收录平台
  • 公司文化墙创意设计深圳百度seo公司
  • 做夏促的网站有哪些seo咨询服务价格
  • 职业生涯规划大赛获奖作品seo网站优化系统
  • 17网站一起做网店广州营销战略包括哪些方面
  • 无锡企业做网站新版阿里指数官网
  • 商赢网站建设黑五类广告推广