如何比较EL一个char属性(How to compare a char property in E

2019-07-18 12:24发布

我有一个像下面的命令按钮。

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

即使当product.orderStatus值等于'N'的命令按钮没有在我的网页显示。

这里product.orderStatus是一个字符属性。

Answer 1:

这是不幸的是,预期的行为。 在EL,像引号里的东西'N'始终被视为一个Stringchar属性值始终为数字处理。 的char是在通过它的Unicode码点,其是表示EL 78N

有两种解决方法

  1. 使用String#charAt()传递0 ,以获得char出的String中EL。 请注意,如果您的环境支持EL 2.2,这仅适用。 否则,你需要安装的JBoss EL 。

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

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

真正的解决方案 ,但是,是使用一个枚举 :

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

private OrderStatus orderStatus; // +getter

那么您可以在EL使用正是所期望的语法:

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

附加的好处是,枚举执行类型安全。 您将无法分配aribtrary人物像的订单状态值。



文章来源: How to compare a char property in EL
标签: jsf char el