【问题标题】:javax.faces.component.UIData.getRows fails to parse 25 and 1000 as valid integer valuesjavax.faces.component.UIData.getRows 无法将 25 和 1000 解析为有效整数值
【发布时间】:2019-04-10 07:24:16
【问题描述】:

我正在努力将int 值传递给属性rows

<p:dataTable rows="#{isLazy ? 25 : 1000}">
    <f:attribute name="selectionMode" value="#{widget.selectionMode}"/>
    <f:attribute name="selection" value="#{widget.selectionModel.selection}"/>
</p:dataTable>

javax.faces.component.UIData 中检索值的方法定义为

public int getRows() {
    return (Integer) getStateHelper().eval(PropertyKeys.rows, 0);
}

getStateHelper().eval(PropertyKeys.rows, 0) 生成 Long,此后无法转换为 Integer

  1. 有没有办法告诉解析器将表达式isLazy ? 25 : 1000 的结果视为intInteger
  2. 是我一个人,还是演员写得这么差?

我是 JSF 的新手,如有任何帮助,将不胜感激。


更新 1:令人惊讶的是,如果我从 p:dataTable 中排除所有 &lt;f:attribute /&gt;s,它会起作用(返回 Integer我完全不知所措。

更新 2:我发现了一个糟糕的解决方法。我可以在facelet-taglib 中定义一个函数,引用Integer.valueOf(int)

<function>
    <function-name>toInt</function-name>
    <function-class>java.lang.Integer</function-class>
    <function-signature>Integer valueOf(int)</function-signature>
</function>

并用它来总结我的价值。

<f:attribute name="rows" value="#{bg:toInt(1000)}"/>

【问题讨论】:

  • 也许您可以调用管理 bean 函数而不是在 p:dataTable 中进行验证?自从我玩 JSF 以来已经有一段时间了,但这应该可以工作
  • @LukasNovicky 当然,它可以被重构。关键是我连一个int 都放不进去——它会变成Long
  • 也许这是 primeFaces 的典型特征?我从来没有使用过它——总是使用纯 JSF,并且在传递 int、Integers 或任何类型的 longs 时都没有问题。抱歉,我无法为您提供更多帮助
  • 我很困惑没有初始的minimal reproducible example...您提到了所有f:attribute标签的“删除”,但您的初始帖子中没有...请永远,永远,始终创建一个minimal reproducible example。否则很难(几乎不可能)尝试复制......stackoverflow.com/questions/13009280/…
  • @Kukeltje 我在发布时删除了它们,因为它们似乎完全不相关。更新

标签: jsf primefaces


【解决方案1】:

我所谓的“糟糕的解决方法”结果证明是我找到的唯一可行的解​​决方案。

我在facelet-taglib 中定义了一个引用Integer.valueOf(int) 的函数

<function>
    <function-name>toInt</function-name>
    <function-class>java.lang.Integer</function-class>
    <function-signature>Integer valueOf(int)</function-signature>
</function>

并且可以用它包装一个整数文字。

<f:attribute name="rows" value="#{bg:toInt(1000)}"/>

这个定义在我的facelet-taglib 中乱扔垃圾,我有点讨厌它,但它确实有效。

有用的链接:

JSF composite:attribute with f:attribute conversion error

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 2012-10-21
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多