Я могу получить доступ к своей переменной, хранящейся в бэк-бине, со своей страницы JSF2, поэтому работают такие вещи, как
<h:outputText value="#{myBean.myValue}"/>
, и печатается значение (которое int btw.)Хорошо.Однако при попытке использовать это значение в условных выражениях внутри c: if и / или c: когда теги никогда не равняются ничему ... так:
<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>
или даже
#{myBean.myValue eq '1'}
или
#{myBean.myValue == '1'}
никогда не будет иметь значение true, даже если значение действительно равно 1 или> 1.
К сожалению, сравнение работает в атрибуте рендеринг тег!Итак, это:
<h:outputText value="whatever" rendered="#{myBean.myValue == 1}"/>
в порядке!
Что происходит?
ОБНОВЛЕНИЕ:
Это работает:
public int getMyValue() {
return 1;
}
, но это не так:
@Column(name = "orderstatus")
public int getOrderStatus() {
return orderStatus;
}
Значение int печатается правильно, но 1 == 1 ложно.
Обрабатываются ли сущностные бины в специальномпуть?Могу ли я использовать их для отображения их значения в пользовательском интерфейсе?
UPDATE2:
<h:outputText value="#{order.adcOrderStatus.orderStatus.class}"/>
печатает java.lang.Integer.
UPDATE3:
Вот полный код:
<?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>
Работает при вызове со значением типа int.Но это не работает:
<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>
Это отображает правильное значение:
<h:outputText value="#{order.adcOrderStatus.orderStatus.class}"/>