代码之家  ›  专栏  ›  技术社区  ›  Titi Wangsa bin Damhore

如何评估Struts2s:if?

  •  5
  • Titi Wangsa bin Damhore  · 技术社区  · 15 年前

    它有一个名为“type”的属性

    <s:property value="item.type" />
    

    我明白了: Q

    好的,所以我可以读取值,但当我尝试此操作时:

    <s:property value="item.type == 'Q'" /> 
    

    这给了我一个空字符串:

    <s:property value="%{#item.type == 'Q'}" />
    

    我甚至试过:

    <s:property value="item.type.equals('Q')" />
    

    但是我得到了这个字符串: 假的

    4 回复  |  直到 15 年前
        1
  •  15
  •   Josh Fuson    13 年前

    好吧,我一直在努力解决这个问题。。。最终发现了如何做到这一点。“Q”是字符串文字,而“Q”是字符。因此。。。

    <s:if test="%{#item.type == 'Q'}">
    

    将始终评估为false。相反,尝试。。。

    <s:if test="%{#item.type == \"Q\"}">
    

    我也见过这样做。。。

    <s:if test='%{#item.type == ("Q")}'>
    

    (请注意测试属性值周围的单引号。)

    OGNL是我心中的一根刺。我猜OP已经找到了答案。但希望这能帮助其他人。

        2
  •  2
  •   Brian Yarger    15 年前

    我不认为你可以在这个标签的value属性里面放任何EL。您可以通过以下方式实现这一点:

    <s:if test="%{#item.type == 'Q'}">
      true
    </s:if>
    <s:else>
      false
    </s:else>
    

    下面是更多的例子 here

    注意-我在视图中使用freemarker,因此上述内容可能不准确。在freemarker中,您可以通过分配来执行此操作:

    <#assign val = (item.type == 'Q')/>
    ${val}
    

    <#if (item.type == 'Q')>true<#else>false</#if>
    
        3
  •  0
  •   gce    12 年前
    <s:set name="prop" value="%{'val'}"/>
    
    <s:if test="%{#prop == 'val'}">
      <s:property value="%{#prop}" />
    </s:if>
    
    <s:elseif test="%{#prop=='val1'}">
      <s:property value="%{#prop}" />
    </s:elseif>
    
    <s:else>
      ...
    </s:else>
    
        4
  •  0
  •   PARDEEP BALOWRIA    8 年前

    这很简单:

    <s:property value='item.type == "Q"' />
    

    只需要将单引号替换为双引号,反之亦然