我最近一直在研究 spring 表单标签库,并遇到了一个相当令人不安的现象。
<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 http://forum.springsource.org/showthread.php?t=84102
问题是 JSP 正在评估 el,并且盲目地使用“true”比较评估结果。等于
使用该方法将字符串与布尔值进行比较将始终返回 false,因为类型不匹配,因此这绝对是一个缺陷。
幸运的是,有问题的 isDisabled 方法是受保护的单行,因此我能够通过扩展 8 输入标记的有效并覆盖该方法来解决它,以进行稍微更稳健的比较。
所以答案是,是的,这是一个缺陷,从 skaffman 的评论来看,这似乎是一个旧库在 JSP EL 实现时没有得到很好更新的问题。
谢谢你们的回答
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)