如何评估Struts2s:if?
我有一个叫做“item”的对象。 它有一个名为“type”的属性 当我这样做时:如何评估Struts2s:if?,struts2,Struts2,我有一个叫做“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" />
我明白了:
Q
好的,所以我可以读取值,但当我尝试此操作时:
<s:property value="item.type == 'Q'" />
我得到一个空字符串
这给了我一个空字符串:
<s:property value="%{#item.type == 'Q'}" />
我甚至试过:
<s:property value="item.type.equals('Q')" />
但是我得到了这个字符串:
假的
如何获得“true”?我认为您不能将任何EL放入此标记的value属性中。您可以通过以下方式实现这一点:
<s:if test="%{#item.type == 'Q'}">
true
</s:if>
<s:else>
false
</s:else>
真的
假的
下面是更多的例子
注意-我在视图中使用freemarker,因此上述内容可能不准确。在freemarker中,您可以通过分配来执行此操作:
<#assign val = (item.type == 'Q')/>
${val}
${val}
或者,您也可以像上面那样使用if构造:
<#if (item.type == 'Q')>true<#else>false</#if>
truefalse
好吧,我一直在努力解决这个问题。。。最终发现了如何做到这一点。“Q”是字符串文字,而“Q”是字符。因此
<s:if test="%{#item.type == 'Q'}">
将始终评估为false。相反,尝试
<s:if test="%{#item.type == \"Q\"}">
我也见过这样做
<s:if test='%{#item.type == ("Q")}'>
(请注意测试属性值周围的单引号。)
OGNL是我心中的一根刺。我猜OP已经找到了答案。但希望这能帮助其他人。
<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>
...
它非常简单:
<s:property value='item.type == "Q"' />
只需要将单引号替换为双引号,反之亦然