質問
iには「item」というオブジェクトがあります。 「type」というプロパティがあります
これを行うとき:
<s:property value="item.type" />
私はこれを取得します: Q
OK、だから私は値を読むことができますが、これを試してみると:
<s:property value="item.type == 'Q'" />
i空の文字列を取得
これは空の文字列を提供します:
<s:property value="%{#item.type == 'Q'}" />
iもこれを試しました:
<s:property value="item.type.equals('Q')" />
しかし、私はこの文字列を得ました: false
「true」を取得するにはどうすればよいですか
解決
わかりました、私はこれに永遠に苦労しました...そして最終的にこれを行う方法を見つけました。 &quot; Q&quot;文字列リテラルと文字である「Q」です。したがって...
<s:if test="%{#item.type == 'Q'}">
は常にfalseと評価されます。代わりに...
<s:if test="%{#item.type == \"Q\"}">
また、この方法で見たことがあります...
<s:if test='%{#item.type == ("Q")}'>
(テスト属性値を囲む一重引用符に注意してください。)
OGNLは私の側にいばらです。私はOPがすでにこれを理解していると推測しています。しかし、うまくいけば、これは他の誰かに役立つ。
他のヒント
このタグのvalueプロパティ内にELを配置できるとは思わない。次のような方法でそれを達成できます:
<s:if test="%{#item.type == 'Q'}">
true
</s:if>
<s:else>
false
</s:else>
この他の例は、こちら
注-ビューにはfreemarkerを使用しているため、上記は正確ではない場合があります。 freemarkerでは、assignを使用してこれを行うことができます。
<#assign val = (item.type == 'Q')/>
${val}
または、上記のif構文も使用できます:
<#if (item.type == 'Q')>true<#else>false</#if>
<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"' />
一重引用符を二重引用符に、またはその逆に置き換える必要があります
所属していません StackOverflow