【问题标题】:Custom Tag inheritance.自定义标签继承。
【发布时间】:2009-07-25 09:26:40
【问题描述】:

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

但是在定义了Tag A 和TAg B 的.tld 文件中,存在重复的属性定义。有没有办法避免这种重复。 如果不, 我的问题是否有完全不同的方法。 (两个标签做的事情完全一样,但略有不同,所以我使用继承)

问候, 迪帕克

【问题讨论】:

    标签: jsp tags


    【解决方案1】:

    我认为您将不得不忍受 TLD 重复,我知道没有办法做您想做的事。这很烦人,感觉也不对,但是 TLD 文件很粗糙,很丑。

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

    因此,这是在 TLD 中的不愉快或 Java 中的不愉快之间做出选择。任君挑选。

    【讨论】:

    • +1。就 DynamicAttributes 接口而言,它最大的问题是缺乏编译时检查。如果您拼错某个属性,则使用 TLD(尽管它们很粗糙)编译将失败;使用动态属性,你最多会得到一个运行时 JspException,最坏的情况是错误的属性会被默默吞下,导致不确定的行为。
    猜你喜欢
    • 2022-07-05
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多