Jsp 自定义标记继承。

Jsp 自定义标记继承。,jsp,tags,Jsp,Tags,我在my.tld中定义了一个JSP自定义标记“a”。它有3个必需的属性。它有一个继承SimpleTagHandler的ATagHAndler。 我需要一个新的标签“B”,它的功能与上面的“a”完全相同,但方式略有不同。还有“A”中存在的属性,我将它们复制到.tld文件中的“B”(代码重复)。此外,我还创建了一个BTagHandler扩展了ATagHandler,并覆盖了这两个处理程序中实际更改的少数方法。rest功能在“ATagHandler”中定义。在java方面,由于继承,避免了大量代码重复

我在my.tld中定义了一个JSP自定义标记“a”。它有3个必需的属性。它有一个继承SimpleTagHandler的ATagHAndler。 我需要一个新的标签“B”,它的功能与上面的“a”完全相同,但方式略有不同。还有“A”中存在的属性,我将它们复制到.tld文件中的“B”(代码重复)。此外,我还创建了一个BTagHandler扩展了ATagHandler,并覆盖了这两个处理程序中实际更改的少数方法。rest功能在“ATagHandler”中定义。在java方面,由于继承,避免了大量代码重复

但是在定义了标记A和标记B的.tld文件中,存在属性定义的重复。是否有方法避免这种重复。 如果没有,, 是否有一种完全不同的方法来解决我的问题。(两个标记做的事情完全相同,但有一点变化,所以我使用了继承)

问候,,
Deepak

我想你将不得不忍受TLD复制,我知道没有办法做你想做的事。这很烦人,而且感觉不对劲,但TLD文件既粗糙又难看

不过,您可以选择实现
javax.servlet.jsp.tagext.dynamicAttribute
接口。这允许您省略TLD中的属性声明,因此不必重复它们,但缺点是属性值将作为名称-值对而不是javabean属性传递给您的标记,因此它们没有那么好用


因此,在TLD中的不愉快和Java中的不愉快之间可以选择。请随意选择。

+1.就DynamicAttributes接口而言,它最大的问题是缺乏编译时检查。使用TLD(尽管很粗糙)如果您拼错了一个属性,编译将失败;对于动态属性,您最多只能得到一个运行时JspException,最坏的情况是错误的属性将被默默地吞没,导致不确定的行为。