jsf - 列表收到清单在 JSF 2.3 中
问题描述
我已将我的项目从 JSFContainer 2.2 升级到 JSFContainer 2.3
<p:selectManyListbox id="acl" value="#{controller.process.basisList}" >
<f:selectItems value="#{controller.filinglist}" />
</p:selectManyListbox>
归档列表有像 ob(1L, 'data1') 这样的类对象;具有泛型字符串的基础列表
使用 JSFContainer 2.2、CDI 1.2 和 EL 3.0 时。工作正常长数据已作为字符串存储在基础列表列表中。我在下面的 URL 中理解了这个概念
但是在 JSFContainer 2.3、CDI 2.0 和 EL 3.0 中。我收到以下错误
当我运行代码时
for(String i : basisList) {
System.out.println(i);
}
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String.
我使用下面的代码进行调试
for(Object i : basisList) {
System.out.println(i.getClass() + " > " + i);
}
得到的输出如下
class java.lang.Long > 3
解决方案
当您从 JSF 2.2 升级到 JSF 2.3 时,此行为是正确的。以前,JSF 2.2 和更早版本没有自动转换这些值,这实际上不是预期的行为。
它在UISelectMany
JSF 2.3 的 javadoc 中指定。
Converter
使用以下算法获得:
如果组件有一个附加的
Converter
,使用它。如果没有,请查找
ValueExpression
for 值(如果有)。必须指向的ValueExpression
东西是:
一组基元(例如
int[]
)。查找Converter
该原始类型的注册类。对象数组(例如
Integer[]
或String[]
)。查找Converter
底层元素类型的注册类。一个
java.util.Collection
。不要转换值。相反,将提供的一组可用选项转换为字符串,就像在渲染响应期间所做的那样,并且对于与提交值的任何匹配,将可用选项作为对象添加到集合中。如果由于某种原因
Converter
无法找到 a,则假定类型为 String 数组。
上述块引用的强调部分是自 JSF 2.3 以来的新内容(为了比较,这里是javadoc的 JSF 2.2 变体UISelectMany
)。
您需要将您的 修复basisList
为与 完全相同的类型filinglist
,否则您需要附加一个明确的Converter
.
推荐阅读
- python - 如何解决这个 Python OpenTimelineIO 安装问题?
- regex - 正则表达式应该只包含
- jquery - jQuery .ready() 函数在加载 iframe 之前运行
- python - 在 Tkinter 中使用 selectimage 时如何从屏幕上隐藏简单的 Checkbutton?
- c# - C# - 我的 ASP.NET MVC 页面总是向我的 JSON POST 请求返回 null
- linux - 如何在 Linux 终端中显示固定的文本行?
- azure - 使用管理员同意端点与使用 promt=consent 授权端点
- deno - 必须提供 --unstable 标志
- javascript - 循环遍历Java脚本中的表中的表
- amazon-web-services - 通过语音助手应用程序自定义付款