我有一个像下面的命令按钮。
<h:commandButton value="Accept orders" action="#{acceptOrdersBean.acceptOrder}"
styleClass="button" rendered="#{product.orderStatus=='N' }"></h:commandButton>
即使当product.orderStatus
值等于'N'
的命令按钮没有在我的网页显示。
这里product.orderStatus
是一个字符属性。
这是不幸的是,预期的行为。 在EL,像引号里的东西'N'
始终被视为一个String
和char
属性值始终为数字处理。 的char
是在通过它的Unicode码点,其是表示EL 78
为N
。
有两种解决方法 :
使用String#charAt()
传递0
,以获得char
出的String
中EL。 请注意,如果您的环境支持EL 2.2,这仅适用。 否则,你需要安装的JBoss EL 。
<h:commandButton ... rendered="#{product.orderStatus eq 'N'.charAt(0)}">
使用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人物像☆
或웃
的订单状态值。