Jsf c:when和c:if don';行不通

Jsf c:when和c:if don';行不通,jsf,jstl,Jsf,Jstl,我可以从JSF2页面访问存储在支持bean中的变量,比如 <h:outputText value="#{myBean.myValue}"/> 或 将永远不会计算为true,即使该值确实为1或>1 恼人的是,比较在标记的呈现属性中起作用!因此: <h:outputText value="whatever" rendered="#{myBean.myValue == 1}"/> 但这并不是: @Column(name = "orderstatus") public int

我可以从JSF2页面访问存储在支持bean中的变量,比如

<h:outputText value="#{myBean.myValue}"/>

将永远不会计算为true,即使该值确实为1或>1

恼人的是,比较在标记的呈现属性中起作用!因此:

<h:outputText value="whatever" rendered="#{myBean.myValue == 1}"/>
但这并不是:

@Column(name = "orderstatus")
public int getOrderStatus() {
return orderStatus;
}
int的值打印正确,但1==1为false

实体bean是以特殊的方式处理的吗?我可以使用它们在UI上显示它们的值吗

更新2:

<h:outputText value="#{order.adcOrderStatus.orderStatus.class}"/>

打印java.lang.Integer

更新3:

<h:outputText value="#{order.adcOrderStatus.orderStatus.class}"/>
以下是完整的代码:

<?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}"/>

您是否按如下方式声明了JSTL核心标记库

<html xmlns:c="http://java.sun.com/jsp/jstl/core">
另见:

在JSF2之前,这些类似JSTL的Facelets标记只在树创建时()进行评估


没有提到这一点,我知道这两个Facelets版本不兼容(这在规范中是明确的),我也不清楚“处理”在这个上下文中是什么意思。可能值得仔细阅读规范,看看它是否更详细地描述了行为,在运行时检查您的行为,并在视图创建时检查您的对象状态。

在大多数情况下可以替换为渲染属性,在某些情况下,您可以添加一些中性的额外组件,如

因为还有一个替代方案,它与JSF生命周期一起工作,更加轻量级:

<e:div>
    <h:selectBooleanCheckbox id="boolean" value="#{bean.value}" rendered="#{bean.type == 'boolean'}"/>
    ...
    <e:otherwise>
        <h:inputText id="text" value="#{bean.value}"/>
    </e:otherwise>
</e:div>

...

您可以从进行配置(请使用页面翻译)。

标记库必须正确,否则Netbeans会抱怨。c:否则会被处理……您是在JSP还是Facelets上使用JSF2.0?JSF2.0和Facelets。没有JSP。这是一个信息丰富的评论,谢谢。我本来希望避免使用呈现属性,但是…作为未来读者的注意,他正在使用JSP,因为c标记来自JSTL库,它代表(JSP标准标记库),因此,如果它不起作用,那么我必须依赖呈现属性。。。
<h:outputText value="#{order.adcOrderStatus.orderStatus.class}"/>
<html xmlns:c="http://java.sun.com/jsp/jstl/core">
<h:panelGroup rendered="#{cc.attrs.orderStatus == 1}">
    <h:graphicImage url="#{resource['img/icons/flag_yellow.png']}" /> Created
</h:panelGroup>
<h:panelGroup rendered="#{cc.attrs.orderStatus == 2}">
    <h:graphicImage url="#{resource['img/icons/flag_orange.png']}" /> Stopped
</h:panelGroup>
<h:panelGroup rendered="#{cc.attrs.orderStatus == 3}">
    <h:graphicImage url="#{resource['img/icons/flag_green.png']}" /> Active
</h:panelGroup>
<h:panelGroup rendered="#{cc.attrs.orderStatus == 99}">
    <h:graphicImage url="#{resource['img/icons/flag_red.png']}"  /> Failed
</h:panelGroup>
<h:panelGroup rendered="#{cc.attrs.orderStatus != 1 && cc.attrs.orderStatus != 2 && cc.attrs.orderStatus != 3 && cc.attrs.orderStatus != 99}">
    <h:graphicImage url="#{resource['img/icons/question_mark.png']}" /> Unknown
</h:panelGroup>
<c:if test="#{myBean.myValue == 1}">
<e:div>
    <h:selectBooleanCheckbox id="boolean" value="#{bean.value}" rendered="#{bean.type == 'boolean'}"/>
    ...
    <e:otherwise>
        <h:inputText id="text" value="#{bean.value}"/>
    </e:otherwise>
</e:div>