这个需求,我估计很多时候都不会用到,但是,我们目前在做一个CMS的系统,在创建页面的时候,需要控制页面各个板块显示的内容来源,这个不是关键,关键是页面内容配置完毕后,如何提交内容,也就是说如何和后台系统通信。这个时候,有两种做法,一种是在页面的控制区域内添加右键菜单,实现这个功能。另外一个做法,就是在页面中添加按钮区域来实现。
但是不管那种做法,控制区域的html页面上的逻辑代码片,都不可能在模板里面添加,这是不友好的,客户也是不会考虑这个的,再说了,他也没有办法考虑。所以,需要CMS系统自动最近这个控制区域的html代码片。于是,java操作html的插件就诞生了!有不少类似的插件,这里我选择比较简单的jsoup插件。下面的简单实验,用到的版本是1.9.2,就一个jar包,不需要额外的资源了。
我这里上代码,分别说明右键实现,以及直接追加button的方式实现。
先说右键实现方案,这里,右键菜单是用bootstrap-contextmenu.js插件实现的,是基于bootstrap风格的。
1 /**
2 *@author"shihuc"3 * @date 2016年5月21日4 */
5 packageopc;6
7 importjava.io.File;8 importjava.io.FileOutputStream;9 importjava.io.IOException;10 importjava.io.OutputStreamWriter;11
12 importorg.jsoup.Jsoup;13 importorg.jsoup.nodes.Document;14 importorg.jsoup.nodes.Element;15 importorg.jsoup.select.Elements;16
17 /**
18 *@author"shihuc"19 *20 */
21 public classDemo {22
23 /**
24 *@paramargs25 *@throwsIOException26 */
27 public static void main(String[] args) throwsIOException {28 File input = new File("./example.html");29 Document doc = Jsoup.parse(input, "UTF-8");30 System.out.println(doc.html());31 Elements content = doc.getElementsByTag("body");32 //找到body的内容
33 String body = content.get(0).html();34 System.out.println(body);35
36 //读取控制页面右键的代码片段
37 File pice = new File("./pice.html");38 Document pdoc = Jsoup.parse(pice, "UTF-8");39 Element control_area = pdoc.getElementById("tk-cms-page-context-menu-control-area");40
41 //将业务相关的html代码片添加到右键菜单控制区域中
42 control_area.append(body);43
44 //将带有业务相关代码的html内容填写到原来的example.html文件的body区域
45 content.get(0).html(pdoc.html());46
47 FileOutputStream fos = new FileOutputStream("./output.html", false);48 OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");49 osw.write(doc.html());50 osw.close();51 }52
53 }
这里的example.html文件的内容如下:
1
2
3
4
5
6
7
This is a test page
8
9
10
11
12
13
14
那个pice.html的内容如下:
1
2 .vCenter3 {
4 vertical-align:middle;
5 margin:0 auto;
6 }
7
8
9
10
11
Cancel12
Action13
14