【问题标题】:J2EE: Default values for custom tag attributes [duplicate]J2EE:自定义标签属性的默认值 [重复]
【发布时间】:2011-02-22 14:42:06
【问题描述】:

因此根据 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。 “标签属性不是必需的”,因此“标签处理程序应提供默认值”。我想提供一个默认值,那么我错过了什么?

非常感谢任何帮助。

【问题讨论】:

    标签: java jakarta-ee jsp-tags custom-attributes


    【解决方案1】:

    我会回答我自己的问题。我顿悟了,意识到java.lang.Boolean 是一个类而不是一个原语。也就是说这个值可以是null,经过测试,这个值肯定是null。

    如果没有定义值,则传入null。否则,该值就是传入的任何值。所以我在声明属性后要做的第一件事就是检查它是否为null。如果它是 null,那么我知道一个值没有传入或者有人传给我 null,它应该被转换为一些默认值:

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

    【讨论】:

    • 在我的情况下它不起作用。我的布尔属性永远不会为空:不设置它必须调用构造函数new Boolean(null),所以我总是得到一个非空的false 值。
    【解决方案2】:

    使用 JSP EL 和条件运算符,它更简洁,甚至更短:

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

    【讨论】:

      猜你喜欢
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多