I can access my variable stored in a backing bean from my JSF2 page, so things like
<h:outputText value="#{myBean.myValue}"/>
work, and the value (which is an int btw.) prints okay. However, when trying to use this value in conditional expressions within c:if and/or c:when tags it never equals anything... so:
<c:if test="#{myBean.myValue == 1}">
<c:set var="myVar" value="true"/>
</c:if>
<c:choose>
<c:when test="#{myBean.myValue > 1}">
<c:set var="myVar" value="true"/>
</c:when>
</c:choose>
or even
#{myBean.myValue eq '1'}
or
#{myBean.myValue == '1'}
will never evaluate to true, even if the value is indeed 1 or >1.
Annoyingly the comparison works in the rendered attribute of a tag! So this:
<h:outputText value="whatever" rendered="#{myBean.myValue == 1}"/>
is fine!
What is going on?
UPDATE:
This works:
public int getMyValue() {
return 1;
}
but this does not:
@Column(name = "orderstatus")
public int getOrderStatus() {
return orderStatus;
}
The int's value is printed correctly, but 1 == 1 is false.
Are entity beans handled in a special way? Can I use them for displaying their value on the UI?
UPDATE2:
<h:outputText value="#{order.adcOrderStatus.orderStatus.class}"/>
prints java.lang.Integer.
UPDATE3:
Here is the full code:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:cc="http://java.sun.com/jsf/composite">
<cc:interface>
<cc:attribute name="orderStatus" required="true"/>
</cc:interface>
<cc:implementation>
<c:choose>
<c:when test="#{cc.attrs.orderStatus == 1}" >
<c:set var="unknownStatus" value="false"/>
</c:when>
<c:when test="#{cc.attrs.orderStatus == 2}" >
<c:set var="unknownStatus" value="false"/>
</c:when>
<c:when test="#{cc.attrs.orderStatus == 3}" >
<c:set var="unknownStatus" value="false"/>
</c:when>
<c:when test="#{cc.attrs.orderStatus == 99}" >
<c:set var="unknownStatus" value="false"/>
</c:when>
<c:otherwise>
<c:set var="unknownStatus" value="true"/>
</c:otherwise>
</c:choose>
<h:graphicImage url="#{resource['img/icons/flag_yellow.png']}" rendered="#{cc.attrs.orderStatus == 1}"/>
<h:outputText value="Created" rendered="#{cc.attrs.orderStatus == 1}"/>
<h:graphicImage url="#{resource['img/icons/flag_orange.png']}" rendered="#{cc.attrs.orderStatus == 2}"/>
<h:outputText value="Stopped" rendered="#{cc.attrs.orderStatus == 2}"/>
<h:graphicImage url="#{resource['img/icons/flag_green.png']}" rendered="#{cc.attrs.orderStatus == 3}"/>
<h:outputText value="Active" rendered="#{cc.attrs.orderStatus == 3}"/>
<h:graphicImage url="#{resource['img/icons/flag_red.png']}" rendered="#{cc.attrs.orderStatus == 99}"/>
<h:outputText value="Failed" rendered="#{cc.attrs.orderStatus == 99}"/>
<h:graphicImage url="#{resource['img/icons/question_mark.png']}" rendered="#{unknownStatus}"/>
<h:outputText value="Unknown" rendered="#{unknownStatus}"/>
</cc:implementation>
</html>
It works when called with an int value. But this doesn't work:
<p:dataTable value="#{cc.attrs.orders}" var="order">
<p:column>
<f:facet name="header">
<h:outputText value="Status"/>
</f:facet>
<mytag:orderStatus orderStatus="#{order.adcOrderStatus.orderStatus}"/>
</p:column>
</p:dataTable>
This displays the correct value:
<h:outputText value="#{order.adcOrderStatus.orderStatus.class}"/>