【问题标题】:JSF char comparison does not work as expected [duplicate]JSF char比较没有按预期工作[重复]
【发布时间】:2013-03-20 10:12:32
【问题描述】:

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

<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 值的整数表示。

你对这个问题有任何想法吗?

【问题讨论】:

  • 您想将charAt(0)ge / le 进行比较?首先将 charAt(0) 转换为数字并删除这些数字周围的 ''...
  • 您可以在 Bean 类中创建一个Boolean 变量。在 bean 类中进行此比较并将布尔变量设置为 truefalse。在渲染中使用该变量。
  • @Daniel 据我所知。 char 数据类型在 JVM 中表示为整数。这就是我比较 char 值的原因。我希望比较 unicode 十进制值。
  • @SatheshS 我在dataTable中使用了这个commandLink,所以它会被迭代传播。

标签: java jsf char el logical-operators


【解决方案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}">

另见:

【讨论】:

  • 正如预期的那样,BalusC 回答了所有 JSF 问题。非常感谢。
猜你喜欢
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-03
相关资源
最近更新 更多