spring form taglib disabled属性是否真的必须解析为字符串?

The*_*rav 6 java spring jsp spring-mvc

我最近一直在使用弹簧形式的taglib,并且遇到了一个相当令人不安的现象.

<form:select path="whatever" disabled="${true}">
Run Code Online (Sandbox Code Playgroud)

将呈现未禁用的select元素

<form:select path="whatever" disabled="${'true'}">
Run Code Online (Sandbox Code Playgroud)

将呈现禁用的select元素.

这向我表明标签需要该属性中的字符串并且拒绝强制任何布尔值(可能首先检查类型).

影响是我无法做出类似于<form:select path="whatever" disabled="${someOtherfield.selectedId != -1}" />我们系统中经常发生的事情.

我只是错过了表单taglibs功能的一部分吗?这是一个合法的设计决定吗?缺陷?

The*_*rav 5

好吧,我做了一些更多关于这个,因为解决方案看起来太难看了.

http://forum.springsource.org/showthread.php?t=84102

问题是JSP正在评估el,并盲目地使用"true".equals比较评估结果

使用该方法将String与布尔值进行比较将始终返回false,因为类型不匹配,因此它肯定是一个缺陷.

幸运的是,故障中的isDisabled方法是一个受保护的单线程,因此我已经能够通过扩展8输入标记的影响并覆盖该方法来进行稍微更稳健的比较.

所以答案是,是的,这是一个缺陷,并且从skaffman的评论看起来,当JSP EL实现时,旧库没有很好地更新是一个问题.

谢谢你的答案