我想定义一个jsp标记,该标记可以接受.tld文件中未声明的一些额外属性。可能吗?
我想要这个,因为我想定义一个<cms:img>标签,它将生成一个html img标签。用户可以向其传递一些属性,但是我不想限制用户,希望他们可以将其用作普通的html img标签。
<cms:img>
img
例如,用户可以使用此标记并传递一些必需的信息:
<cms:img id="111" />
它将生成一个html img标签,如下所示:
<img src="/show_images?id=111" />
我需要的只是一个id属性。
id
但是用户可以将其视为普通的html img标签,并向其传递一些额外的属性,例如:
<cms:img id="111" width="100px" height="100px" style="..." more attributes .. />
我不想在标签中声明其他属性,因为太多了,用户可能拥有其自定义属性。
所以我想知道:我可以只id在jsp标记中声明属性,但让它接受所有其他未声明的属性吗?
是的,有可能。这些称为动态属性。参见http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPTags5.html#wp89775:
动态属性(可选) 指示此标记是否支持带有动态名称的其他属性。该值标识作用域内的属性,在其中放置一个Map,其中包含在调用标签期间传递的动态属性的名称和值。如果标记指令的动态属性的值等于变量指令的名称给定的值或属性指令的名称属性的值,则将导致翻译错误。
动态属性(可选)
指示此标记是否支持带有动态名称的其他属性。该值标识作用域内的属性,在其中放置一个Map,其中包含在调用标签期间传递的动态属性的名称和值。如果标记指令的动态属性的值等于变量指令的名称给定的值或属性指令的名称属性的值,则将导致翻译错误。