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

网站建设常用的英文英文网站建设需要注意的五点问题

网站建设常用的英文,英文网站建设需要注意的五点问题,字体模板素材免费下载网站,phpcms做网站页面开发今天接到一个优化需求,表格导出后的表头顺序和页面不一致,要优化成一致的。根据传入的字段,动态导出数据,并保证顺序。 我看到导出的实体类都有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.yayakq.cn/news/975675/

相关文章:

  • 离石做网站的公司vs做网站不显示图片
  • 有哪些可以做兼职的翻译网站吗用网址进入的游戏
  • 旅游网站开发意义和价值微信公众平台一定要找网站做吗
  • 辽宁省住房和城乡建设部网站主页网页设计实训报告怎么写
  • 遵义网站建设oadmin运营方案
  • 网站建设与什么专业有关做淘宝导航网站
  • 高端企业网站报价个体经营所得税核定征收2023
  • 滁州公司做网站做网站原价商品打个横线
  • 网站我优化郑州地推公司排名
  • 网站 简约台州关键词优化哪家好
  • 网站开发中所需要的绘图工具东莞网站优化哪里找
  • 南和县建设局黄页网站2015网站设计风格
  • 网站规划设计北京网站建设设计
  • 替朋友做网站app定制网站建设应有尽有
  • 网站域名在哪里申请网站建设 服务内容
  • 网站如何做QQ登录网站两边横幅怎么做
  • 网站建设设计咨询商城网站开发视频教程
  • 怀化住建部网站网站建设属于经营什么范围
  • html的制作网站的优点从做系统后以前的网站打不开了
  • 百度竞价代理商seo文章关键词怎么优化
  • 848给我做一下88网站建筑工程网教
  • 网站开发网站运营怎么做怎么把网站设置为信任网站
  • 做app网站需要什么技术支持网站设计 尺寸
  • 网站解析后 问题企业做网站要多少钱
  • 校园二手市场网站建设方案海城建设网站
  • 视频转动图在线制作网站网页设计实验报告书
  • 网站版权符号代码网站建设要学
  • 深圳网站建设深圳网络自己会网站开发如何赚钱
  • 全景精灵网站建设怎么在网上卖东西赚钱
  • wordpress 社交网站吗苏州注册公司流程和费用