javax.faces.component.UIData.getRows无法将25和1000解析为有效整数值

问题描述 投票:1回答:1

我努力将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:令人惊讶的是,如果我从Integer中排除所有<f:attribute />s,它会起作用(返回p:dataTable)。我完全不知所措。

更新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)}"/>
jsf primefaces
1个回答
0
投票

我称之为“糟糕的解决方法”,是我发现的唯一可行的解​​决方案。

我在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

© www.soinside.com 2019 - 2024. All rights reserved.