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


问题内容

我最近一直在使用spring形式的taglib,遇到了一个相当令人不安的现象。

<form:select path="whatever" disabled="${true}">

将呈现未禁用的选择元素

<form:select path="whatever" disabled="${'true'}">

将呈现一个被禁用的选择元素。

这向我表明,标记在该属性中需要一个字符串,并且拒绝强制转换任何布尔值(可能首先检查类型)。

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

我是否只是缺少表单标签库功能的某些部分?这是一个合理的设计决定吗?有缺陷吗?


问题答案:

好的,我对此做了更多的挖掘,因为变通方法看起来太难看了。

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

问题在于JSP正在评估el,并使用“ true”盲目比较评估结果。

使用该方法将字符串与布尔值进行比较将始终返回false,因为类型不匹配,因此肯定是缺陷。

幸运的是,处于故障状态的isDisabled方法是一个受保护的衬板,因此我能够通过扩展8个输入标签的作用并覆盖该方法以进行更稳健的比较来解决该问题。

因此,答案是肯定的,这是一个缺陷,从skaffman的评论看来,随着JSP EL的实现,旧库没有得到很好的更新是一个问题。

谢谢大家的回答