質問

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

一重引用符を二重引用符に、またはその逆に置き換える必要があります

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top