我有一个名为'item'的对象。 它有一个名为'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')" />
但我得到了这个字符串: 假
我如何得到'真实'?
答案 0 :(得分:15)
<s:if test="%{#item.type == 'Q'}">
将始终评估为false。而是尝试......
<s:if test="%{#item.type == \"Q\"}">
我也看到过这样做......
<s:if test='%{#item.type == ("Q")}'>
(注意测试属性值周围的单引号。)
OGNL是我身边的一根刺。我猜测OP已经解决了这个问题。但希望这有助于其他人。
答案 1 :(得分:2)
我认为你不能把任何EL放在这个标签的value属性中。你可以通过以下方式实现这一目标:
<s:if test="%{#item.type == 'Q'}">
true
</s:if>
<s:else>
false
</s:else>
更多这方面的例子是here
注意 - 我使用freemarker作为视图,因此上述内容可能不准确。在freemarker中,您可以使用assign来执行此操作:
<#assign val = (item.type == 'Q')/>
${val}
或者,您也可以使用上面的if构造:
<#if (item.type == 'Q')>true<#else>false</#if>
答案 2 :(得分:0)
<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>
答案 3 :(得分:0)
这很简单:
<s:property value='item.type == "Q"' />
只需要用双引号替换单引号,反之亦然