2009-07-30 12 views
5

Mam obiekt o nazwie "element". ma właściwość o nazwie „typem”Jak ocenić rozpórki 2 s: jeśli?

kiedy to zrobić:

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

uzyskać to: Q

ok, więc można odczytać wartość, ale gdy próbuję to:

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

dostaję pusty ciąg

ten daj mi pusty ciąg:

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

Próbowałem nawet to:

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

ale mam ten ciąg: fałszywe

jak mogę dostać 'prawdziwe'?

Odpowiedz

14

ok, zmagałem się z tym na zawsze ... i ostatecznie znaleźć jak to zrobić. "Q" to literał łańcuchowy kontra "Q", który jest postacią. dlatego ...

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

będzie zawsze oceniać jako fałszywe. zamiast próbować ...

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

Ja również widziałem to zrobić w ten sposób ...

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

(zauważenie apostrofów wokół wartości atrybutów Test).

OGNL jest Cierń w mojej stronie. Zgaduję, że OP już to rozgryzł. ale mam nadzieję, że to pomoże komuś innemu.

2

Nie sądzę, aby można było umieścić dowolne EL wewnątrz właściwości value tego znacznika. Można tego dokonać czegoś podobnego:

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

więcej przykładów tego są here

Uwaga - używam freemarker na widoku, więc powyższe mogą nie być dokładne. W freemarker można zrobić to z Przypisanie:

<#assign val = (item.type == 'Q')/> 
${val} 

Albo, można również użyć jeśli skonstruować jak powyżej:

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

Jest to tak proste, jak:

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

wystarczy zastąpić pojedyncze cudzysłowy w cudzysłowach i odwrotnie

Powiązane problemy