如何评估struts 2:如果?

时间:2009-07-30 13:14:03

标签: 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.equals('Q')" />

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

我如何得到'真实'?

4 个答案:

答案 0 :(得分:15)

好吧,我一直在努力奋斗......并最终找到了如何做到这一点。 “Q”是字符串文字,而“Q”是字符。因此...

<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"' />

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

相关问题