문제
'항목'이라는 객체가 있습니다. 'type'이라는 속성이 있습니다.
내가 이것을 할 때 :
<s:property value="item.type" />
나는 이것을 얻는다 : q
좋아, 그래서 나는 값을 읽을 수 있지만, 이것을 시도 할 때 :
<s:property value="item.type == 'Q'" />
나는 빈 줄을 얻는다
이것은 나에게 빈 줄을 준다 :
<s:property value="%{#item.type == 'Q'}" />
나는 이것을 시도했다 :
<s:property value="item.type.equals('Q')" />
그러나 나는이 끈을 얻었다 : false
'true'를 얻는 방법은 무엇입니까?
해결책
좋아, 나는 이것으로 영원히 고투했고, 결국 어떻게 해야하는지 알아 냈다. "Q"는 문자열 리터럴 대 'Q'입니다. 그러므로...
<s:if test="%{#item.type == 'Q'}">
항상 거짓으로 평가합니다. 대신 시도해보세요 ...
<s:if test="%{#item.type == \"Q\"}">
나는 또한 이런 식으로 한 것을 보았다 ...
<s:if test='%{#item.type == ("Q")}'>
(테스트 속성 값 주변의 단일 따옴표에 주목하십시오.)
Ognl은 내 편에서 가시입니다. 나는 OP가 이미 이것을 알아 냈다고 생각합니다. 그러나 희망적으로 이것은 다른 사람을 돕습니다.
다른 팁
나는 당신 이이 태그의 값 속성에 EL을 넣을 수 있다고 생각하지 않습니다. 당신은 다음과 같은 것으로 달성 할 수 있습니다.
<s:if test="%{#item.type == 'Q'}">
true
</s:if>
<s:else>
false
</s:else>
이것의 더 많은 예입니다 여기
참고 -보기에는 프리 마커를 사용하므로 위의 정확한 것이 정확하지 않을 수 있습니다. 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"' />
단일 따옴표를 이중 따옴표로 바꾸면됩니다.
제휴하지 않습니다 StackOverflow