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>
上面的代码有效,但如果我像下面这样更改第二个 if,它就不起作用。
<s:if test="troubleSupported=='true'">
<s:if test="troubleSupported.equals('true')">
谁能解释一下造成这种差异的原因。我是不是做错了什么?
我能看到的唯一区别是,action 变量声明为 boolean
for troubleSupported 和 String
for disableCheckBox(注意:不是直接声明,而是通过一些间歇性 Vector)。这会像我看到的那样影响结果吗?
P.S:为了让这个更复杂一点,如果我交换工作场景的单引号和双引号,
<s:if test="disableCheckBox == 'Y'">
不行,
但是
<s:if test="#{troubleSupported.equals('true')}">
继续工作。
目前,我没有在看这个。我对我原来的问题很困惑。 :)
<s:if test="troubleSupported=='true'">
不是在 java 和更多语言中检查相等性的正确方法。正确的方法是:<s:if test="troubleSupported===true">
。更好的是:<s:if test="troubleSupported">
因为你想测试你的布尔值是否为真,所以保持简单。
您也可以使用 thymeleaf-like 表达式检查布尔值,但它更冗长:<s:if test="#{troubleSupported.equals('true')}">
.
我有一个 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>
上面的代码有效,但如果我像下面这样更改第二个 if,它就不起作用。
<s:if test="troubleSupported=='true'">
<s:if test="troubleSupported.equals('true')">
谁能解释一下造成这种差异的原因。我是不是做错了什么?
我能看到的唯一区别是,action 变量声明为 boolean
for troubleSupported 和 String
for disableCheckBox(注意:不是直接声明,而是通过一些间歇性 Vector)。这会像我看到的那样影响结果吗?
P.S:为了让这个更复杂一点,如果我交换工作场景的单引号和双引号,
<s:if test="disableCheckBox == 'Y'">
不行,
但是
<s:if test="#{troubleSupported.equals('true')}">
继续工作。
目前,我没有在看这个。我对我原来的问题很困惑。 :)
<s:if test="troubleSupported=='true'">
不是在 java 和更多语言中检查相等性的正确方法。正确的方法是:<s:if test="troubleSupported===true">
。更好的是:<s:if test="troubleSupported">
因为你想测试你的布尔值是否为真,所以保持简单。
您也可以使用 thymeleaf-like 表达式检查布尔值,但它更冗长:<s:if test="#{troubleSupported.equals('true')}">
.