似乎转换器通常有两个方法getAsObject()
和getAsString()
,它们会将 Object 转换为字符串或从字符串转换。
为什么我们需要这样做?
例如,dataTable
我们总是可以将对象绑定到var
. 为什么我们不能在这里做类似的事情?
最后,客户端(通常是浏览器)将收到您通常通过 .xhtml 文件构建的 JSF 组件树的渲染版本。
浏览器不知道BigDecimals
或Dates
例如。如果您在表单的输入字段中写“1.003”,浏览器应该如何知道它在服务器端是String
afloat
还是 a ?BigDecimal
它无法知道,也无法处理。因此服务器和浏览器之间的通信总是通过Strings
. 当 HTML 被渲染时,该getAsString()
方法将被使用。在处理传输的表单输入时,JSF 将使用 将getAsObject()
其转换回真实类型。
为什么在数据表中var
工作?因为在这里你只会走“一条路”。dataTable 只会显示一些东西,因此toString()
可以使用通用方法。在这种情况下,不需要转换为 Object。
我将为balusc复制并粘贴一个很好的答案,说明为什么我们应该使用 JSF 转换器(我不记得问题本身的链接)
JSF 生成 HTML。HTML 在 Java 术语中基本上是一个大字符串。要在 HTML 中表示 Java 对象,必须将它们转换为字符串。此外,当提交 HTML 表单时,提交的值在 HTTP 请求参数中被视为字符串。在幕后,JSF 从返回字符串中提取它们。要在HttpServletRequest#getParameter()
非标准 Java 对象(即不是 EL 具有内置转换的字符串、数字或布尔值)之间进行转换,您必须为您的实体提供自定义转换器class.This Converter 实现了两个方法 getAsString()
方法,以便所需的 Java 对象以唯一的字符串表示形式和getAsObject()
方法表示,以便可以将 HTTP 请求参数转换回所需的 Java 对象