我有一个如下命令按钮。
<h:commandButton value="Accept orders" action="#{acceptOrdersBean.acceptOrder}"
styleClass="button" rendered="#{product.orderStatus=='N' }"></h:commandButton>
即使product.orderStatus
值等于'N'
,命令按钮也不会显示在我的页面中。
此处product.orderStatus
是一个字符属性。
答案 0 :(得分:13)
不幸的是,这是预期的行为。在EL中,'N'
等引号中的任何内容始终被视为String
,char
属性值始终被视为数字。 char
在EL中由其Unicode代码点表示,78
为N
。
有两个变通办法:
使用String#charAt()
,传递0
,从EL char
中获取String
。请注意,仅当您的环境支持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}">
public enum OrderStatus {
N, X, Y, Z;
}
与
private OrderStatus orderStatus; // +getter
然后您可以在EL中使用完全所需的语法:
<h:commandButton ... rendered="#{product.orderStatus eq 'N'}">
额外奖励是enums强制执行类型安全。您将无法将☆
或웃
等aribtrary字符指定为订单状态值。