我努力将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:令人惊讶的是,如果我从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)}"/>
我称之为“糟糕的解决方法”,是我发现的唯一可行的解决方案。
我在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
,我有点讨厌它,但它有效。
有用的网址: