2010-05-22 77 views
14

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

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

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

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

任何帮助,非常感谢。

回答

15

我想我会回答我自己的问题。我有一个顿悟,并意识到java.lang.Boolean是一个类,而不是一个原语。这意味着该值可以为空,并且在测试之后,该值绝对为空。当一个值没有被定义时,则传入null。否则,该值就是传入的值。所以在声明该属性后我做的第一件事是检查它是否为空。如果是空的话,我知道这个值是不是在通过或有人从我身边走过空的,它应该被转换成一些默认值:

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

看到这个:http://stackoverflow.com/questions/3136415/default-value-on-jsp-custom-tag-attribute – gavenkoa 2013-04-12 06:58:31

+1

对我来说,这是行不通的。我的布尔属性永远不会为空:没有设置它必须调用构造函数'new Boolean(null)',所以我总是得到一个非空'false'值。 – Rafa 2014-03-06 09:49:33

5

使用JSP EL和有条件的经营者是一点点清洁,更短:

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

问候