提问人:Krishnaraj V 提问时间:2/22/2022 最后编辑:Krishnaraj V 更新时间:2/22/2022 访问量:243
struts2 s:if 标签对字符串和布尔值的行为不同
struts2 s:if tag behaves differently for string and boolean
问:
我在下面有一个喜欢s:iterator
s:if
<s:iterator var="connections" value="serviceItems">
<s:if test='disableCheckBox == "Y"'>
disableCheckBox works
</s:if>
<s:if test='#{troubleSupported.equals("true")}'>
troubleWorks
</s:if>
</s:iterator>
上面的代码有效,但是如果我像下面一样更改第二个代码,它就不起作用。
<s:if test="troubleSupported=='true'">
<s:if test="troubleSupported.equals('true')">
有人可以解释一下造成这种差异的原因是什么吗?我在这里做错了什么吗?
我能看到的唯一区别是,action 变量被声明为 troubleSupported 和 disableCheckBox (注意:不是直接的,而是通过一些间歇性的向量)。这会影响我所看到的结果吗?boolean
String
PS:为了让事情进一步复杂化,如果我将单引号和双引号交换为工作场景,
<s:if test="disableCheckBox == 'Y'">
不起作用,
但继续工作。<s:if test="#{troubleSupported.equals('true')}">
目前,我没有看这个。我对我原来的问题感到困惑。:)
答:
1赞
BendaThierry.com
2/22/2022
#1
<s:if test="troubleSupported=='true'">
不是在 Java 和更多语言中检查相等性的正确方法。正确的方法是:。更好的是:因为你想测试你的布尔值是否为真,所以保持简单。<s:if test="troubleSupported===true">
<s:if test="troubleSupported">
您也可以使用类似 thymeleaf 的表达式检查布尔值,但它更冗长:.<s:if test="#{troubleSupported.equals('true')}">
评论
1赞
Roman C
2/22/2022
该表达式在 OGNL 中基本上有错误的语法。
0赞
BendaThierry.com
2/22/2022
是的,这是讲述同样事情的另一种方式。将布尔值与字符串值进行比较也是一个很大的错误。'true'
0赞
Roman C
2/22/2022
它不是比较,而是在解析时抛出异常。
1赞
Krishnaraj V
2/22/2022
当我弄乱这个标签试图弄清楚发生了什么时,我能够看到一些 jsp 编译错误。不知道这个布尔值到字符串异常是如何被遗漏的。谢谢你的指点。将尝试更改日志记录级别并查看。
1赞
Krishnaraj V
2/23/2022
只有当我弄乱标签试图弄清楚发生了什么时,才会出现表达式错误。当我使用 时,它工作得很好,没有任何错误。<s:if test='#{troubleSupported.equals("true")}'>
上一个:如何访问支柱标签的嵌套标签?
评论