Вопрос

у меня есть объект с именем 'item'. у него есть свойство с именем 'type'

когда я это сделаю:

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

я получаю это: Вопрос

Хорошо, я могу прочитать значение, но когда я попробую это:

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

я получаю пустую строку

это даст мне пустую строку:

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

Я даже попробовал это:

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

но я получил эту строку: ложь

как я могу получить '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 - бельмо на моей стороне. Я предполагаю, что ОП уже понял это. но, надеюсь, это поможет кому-то еще.

Другие советы

Я не думаю, что вы можете поместить какой-либо EL в свойство value этого тега. Вы можете сделать это с помощью чего-то вроде:

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

Дополнительные примеры этого приведены здесь

Примечание. Я использую freemarker для представления, поэтому приведенное выше может быть неточным. В freemarker вы можете сделать это с помощью присваивания:

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