题目见是否有可以编辑java bean对象的通用web组件?
把这个需求当作习题做了一下,准确地说做了一半,从任意咖啡豆动态导出Schema和简单测试网页。就用我在《元数据、开放数据模型及动态系统--形而下学篇》描述的套路。另一半应该更容易。任何XML Parser都支持Validation,一般用XML/Schema的理由之一就是Validation的能力,所以Validation因该不是问题。
我为此写了一个BeanMetadataReader,和一个XSLT,然后就是:
java 代码
- EndPoint in = new EndPoint("object:java.beans.Beans");
- in.setProperty("format", "metadata");
- EndPoint out = new EndPoint("file:///C:/hyperdigital/dataset/test-output/person.html");
- String[] xslts = {"file:///C:/hyperdigital/dataset/test-output/bean-test.xslt"};
- DataPipeLineFactory factory = DataPipeLineFactory.newInstance();
- XMLReader reader = factory.newDataPipeLine(in, out, xslts);
- Person bean = new Person();
- DataSource source = factory.newDataSource(in, bean);
- reader.parse(source);
如果把写作一次享用终生的代码(BeanMetadataReader)算作框架,那上面的代码加上XSLT就是全部的应用代码。
EndPoint里的object:java.beans.Beans只是一个标识,是URN,不是URL,表示输入是一个咖啡豆。和我在以前文章里写得不太一样,改过了。
测试用的咖啡豆:
java 代码
- class Person
- {
- public Person() {}
- public Address getAddress() {return null;}
- public Date getDateOfBirth() {return null;}
- public String[] getEmailAddresses() {return new String[3];}
- public String getFirstName() {return null;}
- public String getLastName() {return null;}
- public boolean isMale() {return true;}
- public int getPinNumber() {return 1111;}
- }
- class Address
- {
- public String getAddressLine1() {return null;}
- public String getAddressLine2() {return null;}
- public String getState() {return null;}
- public String getTownship() {return null;}
- public String getZipCode() {return null;}
- }
附件是用于测试的XSLT,以及产生的Schema和测试网页的HTML。如果想要花哨的网页,只要修改XSLT就行了,甚至只要在XSLT里import一个js文件就可以了。