2009-07-30 7 views
5

私は 'item'というオブジェクトを持っています。ストラット2の評価方法:if?

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

私はこの取得: それは「タイプ」

私はこれを行うと呼ばれる性質がある Q

[OK]を、ので、私は値を読み取ることができますが、私はこれをしようとすると:

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

私は空の文字列

これを取得私は空の文字列与える:

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

を私もこの試みた:

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

をしかし、私はこの文字列を得た: 偽

は、どのように私は、 '真' のですか?

答えて

14

[OK]を、私は永遠にこれで苦労...そして最終的に見つかったFreeMarkerのでは、割り当てでこれを行うことができますこれをどうやって行うのか。 "Q"は、文字である 'Q'と文字列リテラルです。したがって...

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

は常にfalseと評価されます。代わりに、私もそれがこの方法を行って見てきました...

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

を試してみてください...

​​

(テスト属性値の周りの単一引用符に注意してください。)

OGNLはAです私の側の棘。私はOPがすでにこれを理解していると思っています。うまくいけば、これは他の誰かを助ける。

2

私はこのタグのvalueプロパティの中にELを置くことはできません。あなたは、のようなものでそれを達成できます。これの

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

より多くの例here

注ある - 上記正確ではないかもしれないので、私は、ビューの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"' />