2011-04-02 88 views
0

评估使用JSTL如果JSTL标签集/如果

为什么我的价值isOnline不被评估为使用真实JSTL如果

<c:set var="isOnline" value="${friend.online}"/> 
<h:outputText value="#{isOnline}" /> 
<br/> 
(isOnline) is: ${isOnline} 
<c:if test="${isOnline == 'true'}" var="theTruth"> 
    <h:outputText value="hello"/> 
</c:if> 
<br/> 
(isOnline == 'true') is: ${theTruth} 

结果:

true 
(isOnline) is: true 
(isOnline == 'true') is: false 

我不是真的确定为什么条件被评估为false,即使我打印isOnline的值显示它是真实的。

任何帮助,将不胜感激..提前

回答

3

如果它是一个布尔谢谢你,那么你不应该把它比作字符串。只要做

<c:if test="${isOnline}"> 

此外,我看到你使用的是JSF。当JSF提供相同的功能时,您应该尽可能避免使用JSTL标签。这是因为它们不像编码期望的那样同步运行,并且在某些情况下可能导致无法预料的行为。只需使用JSF rendered属性即可。

<h:outputText value="Hello" rendered="#{friend.online}" /> 

对于使用rendered属性的更多示例,请this answer

+0

感谢您的回答,我可能会根据您的建议使用渲染。因为如果使用JSTL,我会得到奇怪的行为。即使friend.online是布尔值,但仍使用 评估为false,我不确定为什么。 – Unis 2011-04-02 16:21:10

+0

然后你在'h:dataTable'中使用这个。改为使用'rendered'属性。另请参阅链接的答案。 – BalusC 2011-04-02 20:42:17