确保自定义标签没有子标签

Making sure custom tag does not have subtags

我正在构建自定义标签来环绕字形。

 <b:icon binding="i" />  

部分 Glyphicon 规范包括:

仅适用于空元素

Icon classes should only be used on elements that contain no text content and have no child elements.

我想确保没有人做类似

的事情
 <b:icon binding="i">
    <cfset myVariable++>
 </b:icon>  

有没有办法确保自定义标签没有任何内部标签?

我可以看到你有两个选择。

首先,如果 thisTag.executionMode 不是 "start",则抛出异常。或者如果 thisTag.hasEndTagtrue,同样可以抛出异常。但是,这会将标签使用限制为:

<b:icon binding="i">

不是

<b:icon binding="i" />

因为 /> 是 shorthand 的结束标签。这不太理想,您可能不会接受这种方法。

其次你可以检查是否有任何 generatedContent 但这是一个很大的偶然事件,因为在开始和结束标签之间完全有可能有一些东西,但要注意不要生成内容:

<b:icon binding="i"><cfset foo="bar"></b:icon>

(注意:即使有换行和缩进也算作 generatedContent)。

底线:虽然 JSP 自定义标签允许控制这类事情,但我看不出 CFML 实现如何控制它。最接近的是完全禁止关闭标签。