列表和表格有所不同,同时我们还支持区块对

113 阅读2分钟

「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」

列表

{{*var}}

  • login-less果然是名不虚传的。从文本到图片,再由表格到现在的列表关于语法方面我们基本上没有学习成本,全部都是不同的特殊符号组成的不同的功能。

  • 这回让我们的重点来到NumbericRenderData . 顾名思义就是数字排序,准确的说是列表排序因为排序和数字一样有顺序而言。

  • NumbericRenderData应该是最简单的使用了,个人觉得。因为在NumbericRenderData内部我们只需要提供列表数据,简而言之就是我们只需要提供一份List数据即可。而这份list里面的元素就是我们的TextRenderData

  • 那么有人就会问了列表展示该如何控制样式呢?

  • 左侧是我们实际默认导出列表的样式属于无序列表。右侧是我放大了word中有序列表中的个别样式截图。如果我想导出来有序列表该如何实现呢?

  • 我们可以看到在NumbericRenderData中已经为我们准备了一些列表样式了。这里我们直接在构建的时候选择显示样式即可

 ​
 @Test
 public void seriListTest() {
   String name = "serlist";
   Map<String, Object> map = new HashMap<>();
   TextRenderData iphone = new TextRenderData("iphone");
   TextRenderData macbook = new TextRenderData("macbook");
   TextRenderData ipad = new TextRenderData("ipad");
   TextRenderData ipod = new TextRenderData("ipod");
   TextRenderData watch = new TextRenderData("watch");
   List<TextRenderData> textRenderData = Arrays.asList(iphone, macbook, ipad, ipod, watch);
   map.put("list", new NumbericRenderData(NumbericRenderData.FMT_DECIMAL,textRenderData));
   init(name,map);
 }
  • NumbericRenderData.FMT_DECIMAL对应的就是1,2,3列表样式。这里我们直接看效果吧。

image-20211130132302127

  • 目前poi-tl支持的列表样式有如下规则。关于如何自定义样式呢?其实只要自己重写NumbericRenderData就行了。

image-20211130132401869

区块对

{{?section}}{{/section}}

  • 咋一听这名次感觉很新颖。实际呢我们可以和xml或者html等语法中标签进行同步理解。因为他在poi-tl就是起到一个包裹的作用。

image-20211130133329400

  • 虽说他是包裹的作用,但是不仅仅是包括。区块对确切的说充当了我们Java语言中的if 和 for两个作用。
场景作用
nullfalse空集合隐藏区块对间内容
非false&&非集合显示且仅显示一次内容
非空集合循环遍历显示内容
  • 下面我们针对上面三种情况来进行测试,首先看看效果和模板配置
 @Test
 public void blockTest() {
   String name = "block";
   Map<StringObject> map = new HashMap<>();
   Map<StringString> userMap = new HashMap<>();
   List<Map<StringString>> list = new ArrayList<>();
   list.add(new HashMap<StringString>(){
    {
       put("name""zhangsan");
       put("age""18");
    }
  });
   list.add(new HashMap<StringString>(){
    {
       put("name""lisi");
       put("age""20");
    }
  });
 ​
   map.put("none"null);
   map.put("show"new HashMap<String,String>(){
    {
       put("appleProduction""macbook pro m1 pro");
    }
  });
   map.put("list", list);
   init(name,map);
 }
  • 怎么样,区块对还是很好理解的吧。记住万能公式。 区块对=if+for