【问题标题】:<s:if> test expression evaluation for boolean value doesn't work as expected<s:if> 布尔值的测试表达式评估未按预期工作
【发布时间】:2014-05-29 07:52:17
【问题描述】:

我想使用 Struts 2 标签 &lt;s:if&gt; 检查变量 bool_val 的值,但它不起作用。

<%@ taglib prefix="s" uri="/struts-tags" %>

<%boolean bool_val=true;%>
real value : <%=bool_val%></br>
expression evaluated value : 
<s:if test="%{bool_val==true}">
    TRUE
</s:if><s:else>
    FLASE
</s:else>

我也尝试了以下测试表达式,但仍然无法正常工作。

<!-- 
bool_val
bool_val==true
%{bool_val}
%{bool_val==true}
%{bool_val=="true"}
 -->

【问题讨论】:

    标签: java jsp struts2 ognl boolean-expression


    【解决方案1】:

    使用struts标签创建这样的变量

    <s:set var="bool_val" value="true" />
    expression evaluated value : 
    <s:if test="%{#bool_val == true}">
        TRUE
    </s:if><s:else>
        FALSE
    </s:else>
    

    这是sample tutorial

    【讨论】:

      【解决方案2】:

      Visruth CV 建议的版本有一个更短的版本:

      <s:set var="foo" value="true" />
      
      expression evaluated value : 
      <s:if test="foo">
          TRUE
      </s:if><s:else>
          FALSE
      </s:else>
      

      如果您想根据 Action 属性检查布尔值,可以采用以下方法:

      class FooAction extends ActionSupport {
          private Boolean _bar = true;
      
          public Boolean isBar() { return _bar; }
      }
      

      在jsp文件中:

      expression evaluated value : 
      <s:if test="isBar()">
          TRUE
      </s:if>
      <s:else>
          FALSE
      </s:else>
      

      【讨论】:

      • 我更喜欢这个答案,因为调用isBar() 属性方法比@roman-c 选择的答案更简单且容易出错。
      【解决方案3】:

      您不能在 Struts 标记中使用 scriptlet 变量,除非您将该变量放入值堆栈。但是你最好不要使用scriptlet 变量,而是变量值。

      <%@ taglib prefix="s" uri="/struts-tags" %>
      
      <%boolean bool_val=true;%>
      real value : <%=bool_val%><br/>
      expression evaluated value : 
      <s:set var="bool_val"><%=bool_val%></s:set>
      <s:if test="#bool_val == 'true'">
          TRUE
      </s:if><s:else>
          FALSE
      </s:else>
      

      【讨论】:

        【解决方案4】:

        如果 Action 类中布尔变量的 getter 方法是 isBool() 然后使用&lt;s:if test="bool"&gt;。 关键是从方法名中去掉is并使用。 例如,如果方法是isApple(),则使用&lt;s:if test="apple"&gt;

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-03-22
          • 2020-09-26
          • 2013-12-15
          • 1970-01-01
          • 2014-04-15
          • 1970-01-01
          • 1970-01-01
          • 2017-12-26
          相关资源
          最近更新 更多