JSF char比较不能按预期工作

时间:2013-03-20 10:12:33

标签: java jsf char el logical-operators

我有一个JSF页面,我根据托管bean属性控制renderer属性。

<p:commandLink action="#{smartphoneBean.drillDown(smartphone.ldapuser,smartphone.productGrp)}"
                            rendered="#{!(smartphone.ldapuser.charAt(0) ge '0' and smartphone.ldapuser.charAt(0) le '9')}"  value="#{smartphone.ldapuser}">

一旦我运行我的代码。这个以其任何数字开头的commandLink仍然会被渲染。

我希望比较char值的整数表示。

你对这个问题有什么看法吗?

1 个答案:

答案 0 :(得分:1)

String#charAt(int)返回一个char(一个Unicode代码点),在EL中解释为Number'0'评估为String,而不是Number。因此,比较将总是产生不希望的结果。

字符09的Unicode代码点为48 to 57。所以,这应该做:

rendered="#{!(smartphone.ldapuser.charAt(0) ge 48 and smartphone.ldapuser.charAt(0) le 57)}"  value="#{smartphone.ldapuser}">

另见: