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的实现,旧库没有得到很好的更新是一个问题。
谢谢大家的回答