如何比较EL中的char属性
我有一个像下面的命令button。
<h:commandButton value="Accept orders" action="#{acceptOrdersBean.acceptOrder}" styleClass="button" rendered="#{product.orderStatus=='N' }"></h:commandButton>
即使product.orderStatus
值等于'N'
,命令button也不会显示在我的页面中。
这里product.orderStatus
是一个字符属性。
不幸的是,这是预期的行为。 在EL中,像'N'
这样'N'
引号中的任何东西总是被当作一个String
并且一个char
属性值总是被视为一个数字。 该char
在EL中由其Unicode代码点表示,对于N
为78
。
有两种解决方法 :
-
使用
String#charAt()
,传递0
,使String
在EL中获得。 请注意,这只有在您的环境支持EL 2.2时才有效。 否则,你需要安装JBoss EL 。<h:commandButton ... rendered="#{product.orderStatus eq 'N'.charAt(0)}">
-
在Unicode中使用char的数字表示,
N
为78。 你可以通过System.out.println((int) 'N')
找出正确的Unicode代码点。<h:commandButton ... rendered="#{product.orderStatus eq 78}">
然而, 真正的解决scheme是使用枚举 :
public enum OrderStatus { N, X, Y, Z; }
同
private OrderStatus orderStatus; // +getter
那么你可以在EL中使用所需的语法:
<h:commandButton ... rendered="#{product.orderStatus eq 'N'}">
额外的好处是,枚举强制types安全。 您不能像☆
或웃
那样指定一个웃
字符作为订单状态值。