struts2 s:if 标签对字符串和布尔值的行为不同

struts2 s:if tag behaves differently for string and boolean

我有一个 s:iterators: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')}">.