J2EE:定制标记属性的缺省值

因此,根据 Sun 的 J2EE 文档(http://docs.sun.com/app/docs/doc/819-3669/bnani?l=en&a=view),“如果不需要标记属性,则标记处理程序应提供默认值。

我的问题是,如何根据文档的描述定义默认值。代码如下:

<%@ attribute name="visible" required="false" type="java.lang.Boolean" %>
<c:if test="${visible}">
     My Tag Contents Here
</c:if>

显然,此标记不会编译,因为它缺少标记指令和核心库导入。我的观点是,我希望“可见”属性默认为TRUE。“标记属性不是必需的”,因此“标记处理程序应提供默认值”。我想提供默认值,那么我错过了什么?

任何帮助都非常感谢。


答案 1

我会回答我自己的问题。我顿悟了,意识到这是一个阶级,而不是一个原始的。这意味着该值可以为 null,并且在测试后,此值肯定是 null。java.lang.Boolean

如果未定义值,则传入 null。否则,该值是传入的任何内容。因此,声明属性后,我要做的第一件事就是检查它是否为 null。如果它是空的,那么我知道一个值没有被传入或有人向我传递了null,它应该转换为某个默认值:

<c:if test="${visible == null}"><c:set var="visible" value="${true}" /></c:if>

答案 2

使用JSP EL和条件运算符,它更干净一些,甚至更短:

<c:set var="visible" value="${(empty visible) ? true : visible}" />

推荐