如何比较EL中的char属性

时间:2013-01-22 08:23:20

标签: jsf char el

我有一个如下命令按钮。

<h:commandButton value="Accept orders" action="#{acceptOrdersBean.acceptOrder}"
   styleClass="button" rendered="#{product.orderStatus=='N' }"></h:commandButton>

即使product.orderStatus值等于'N',命令按钮也不会显示在我的页面中。

此处product.orderStatus是一个字符属性。

1 个答案:

答案 0 :(得分:13)

不幸的是,这是预期的行为。在EL中,'N'等引号中的任何内容始终被视为Stringchar属性值始终被视为数字。 char在EL中由其Unicode代码点表示,78N

有两个变通办法

  1. 使用String#charAt(),传递0,从EL char中获取String。请注意,仅当您的环境支持EL 2.2时,此功能才有效。否则,您需要安装JBoss EL

    <h:commandButton ... rendered="#{product.orderStatus eq 'N'.charAt(0)}">
    
  2. 在Unicode中使用char的数字表示,N为78。您可以通过System.out.println((int) 'N')找出正确的Unicode代码点。

    <h:commandButton ... rendered="#{product.orderStatus eq 78}">
    
  3. 然而,真正的解决方案是使用enum

    public enum OrderStatus {
         N, X, Y, Z;
    }
    

    private OrderStatus orderStatus; // +getter
    

    然后您可以在EL中使用完全所需的语法:

    <h:commandButton ... rendered="#{product.orderStatus eq 'N'}">
    

    额外奖励是enums强制执行类型安全。您将无法将等aribtrary字符指定为订单状态值。