之所以想要问这个问题,是因为我再具体的项目中遇到这样一个情况.
前一阵我被分配一个任务开发一批JSP Tag对一个JavaScript绘图库进行
封装,因为大家对JS都不是很熟悉。开发并不难,很快就把基类搞出来
了,其子类用来完成具体图表的绘制。但当我为写好的JSP Tag写TLD文件
的时候发现写这些文本文件远远没有写Java文件那么轻松,即使这些子类
90%的定义基本相同,你也必须一个个的去手写,比如像下面这样:
- XML code
<tag> <name>BarChart</name> <tagclass>com.fhd.chart.BarChar</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>label</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> ... </tag> <tag> <name>LineChart</name> <tagclass>com.fhd.chart.BarChar</tagclass> <bodycontent>JSP</bodycontent> <attribute> <name>label</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> ... </tag> ...
这些JSPTag的定义中有80%多是用来声明title width height backcolor这些通用属性的
当时我只是随便起的名字,然后复制粘贴,后来发现有些不合适需要调整,还需要一个
一个得修改,稍微漏下一个就会出错。想在我想问一下在xml中有没有类似的集成策略使我
能够很方便的处理这样的问题,比如我可以定义一个基类节点,然后其他节点只需集成下
就可拥有其基类下所有的子节点,就像下面这样:
- XML code
<CommonChartSet> <bodycontent>JSP</bodycontent> <attribute> <name>label</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>width</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>height</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> .... </CommonChartSet> <tag extends="CommonChartSet"> <name>LineChart</name> <tagclass>com.fhd.chart.LineChar</tagclass> </tag> <tag extends="CommonChartSet"> <name>BarChart</name> <tagclass>com.fhd.chart.BarChar</tagclass> </tag> ....
不知道大家明白我的意思没有。希望大家能给个思路或给些资料,当然最后是能给个HelloWorld
------解决方案--------------------
你想用模板方法生成tld的tag内容
------解决方案--------------------
tld的定义格式必须是这样的!不然不会符合sun的dtd
------解决方案--------------------
scheme中倒是有,complextype
------解决方案--------------------
没有这样的功能,这种功能显然是要解析器去做的。
其实你可以在你的解析器上加上解析extend属性的功能即可。