【问题标题】:Dynamic attributes in a jsp tagjsp标签中的动态属性
【发布时间】:2023-04-07 11:58:01
【问题描述】:

我想要一个带有动态属性的标签,比如简单的 html 标签,例如是这样的:

<tags:superTag dynamicAttribute1="value" someOtherAttribute="valueOfSomeOther"/>

在我的标签实现中,我想要这样的东西:

public class DynamicAttributesTag {

    private Map<String,String> dynamicAttributes;

    public Map<String, String> getDynamicAttributes() {
        return dynamicAttributes;
    }

    public void setDynamicAttributes(Map<String, String> dynamicAttributes) {
        this.dynamicAttributes = dynamicAttributes;
    }

    @Override
    protected int doTag() throws Exception {
        for (Map.Entry<String, String> dynamicAttribute : dynamicAttributes.entrySet()) {
            // do something
        }
        return 0;
    }
}

我想指出的是,这些动态属性将在 jsp 中手动编写,而不仅仅是像 ${someMap} 这样的 Map 传递。那么有什么办法可以实现呢?

【问题讨论】:

  • 如果我理解正确,这可以通过 TLD 中的 &lt;dynamic-attributes&gt; 标签来完成。对于“jsp 动态属性示例”,Google 为您提供了几个有希望的结果。
  • @icke 是的,这正是我所需要的。非常感谢你。您可以将其添加为答案,我会接受,但您能否为未来的读者提供一些示例?基本上它只是在TLD中实现接口DynamicAttributes和标签

标签: java jsp


【解决方案1】:

您必须在 TLD 中启用动态属性,如下所示:

<tag>
    ...
    <dynamic-attributes>true</dynamic-attributes>
</tag>

然后让您的标签处理程序类实现DynamicAttributes 接口:

public class DynamicAttributesTag extends SimpleTagSupport implements DynamicAttributes {
    ...
    public void setDynamicAttribute(String uri, String localName, Object value) throws JspException {
        // This gets called every time a dynamic attribute is set
        // You could add the (localName,value) pair to your dynamicAttributes map here
    }
    ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 2012-06-26
    • 2010-11-13
    • 1970-01-01
    相关资源
    最近更新 更多