spring form taglib disabled属性是否必须解析为字符串?
我最近一直在玩弹簧forms的taglib并遇到了一个相当令人不安的现象。
将呈现未禁用的select元素
将呈现禁用的select元素。
这向我表明标签需要该属性中的字符串并且拒绝强制任何布尔值(可能首先检查类型)。
影响是我无法做像
我只是遗漏了表单taglibsfunction的一部分吗? 这是一个合法的设计决定吗? 缺陷?
好吧,我做了一些更多关于这个,因为解决方案看起来太难看了。
http://forum.springsource.org/showthread.php?t=84102
问题是JSP正在评估el,并使用“true”.equals盲目地比较评估结果
使用该方法将String与布尔值进行比较将始终返回false,因为类型不匹配,因此它肯定是一个缺陷。
幸运的是,故障中的isDisabled方法是一个受保护的单线程,因此我能够通过扩展8输入标记的影响并覆盖该方法来进行稍微更稳健的比较。
所以答案是,是的,这是一个缺陷,并且从skaffman的评论看起来,当JSP EL实现时,旧库没有得到很好的更新,这看起来有些问题。
谢谢你们的回答
这有点奇怪,对吧。 Spring源代码显示SelectTag
的disabled
属性是String
,而不是boolean
。 这显然不是正确的做法,但我怀疑它仍然是出于传统原因(spring-form.tld早于JSP EL)。
这使得JSP运行时将一个boolean
强制转换为String
,显然它不会这样做。 我对此并不感到惊讶,因为JSP EL非常有限。
所以你陷入了两个半破坏的实现之间。 您只需要确保将String值传递给该属性。
这种设计的原因是它们有一个特殊的回退代码,当容器不对它进行评估时强制进行EL表达式评估。 例如,这段代码:
<%@ page isELIgnored = "true" %> ... ${'Simple text'}
生成${'Simple text'} Message text
可能,它对一些奇怪的传统容器配置很有用。
也就是说,如果它们使disabled
属性boolean
,则以下代码将不起作用:
<%@ page isELIgnored = "true" %> ...