2009-07-30 52 views
5

我有一個對象叫做'item'。 它有一個名爲「類型」如何評估struts 2 s:if?

屬性時,我這樣做:

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

,但我得到這個字符串: 假

如何獲得 '真'?

回答

14

行,我掙扎着這永遠......最終發現瞭解如何做到這一點。 「Q」是一個字符串字面值,而'Q'是一個字符。因此...

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

將始終評估爲false。而不是嘗試...

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

我還看到了它做這樣......

​​

(注意測試屬性值周圍的單引號)。

OGNL是刺在我身邊。我猜測OP已經知道了這一點。但希望這可以幫助別人。

2

我不認爲你可以把任何EL放在這個標籤的value屬性中。你可以實現這一目標的東西,如:

<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> 
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> 
0

這很簡單,只要:

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

只是需要用雙引號,反之亦然

來代替單引號