【发布时间】: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。
- 有没有办法告诉解析器将表达式
isLazy ? 25 : 1000的结果视为int或Integer? - 是我一个人,还是演员写得这么差?
我是 JSF 的新手,如有任何帮助,将不胜感激。
更新 1:令人惊讶的是,如果我从 p:dataTable 中排除所有 <f:attribute />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