转换器通常有两种方法getAsObject()
和getAsString()
,它们会将Object转换为字符串或从字符串转换。
为什么我们需要这样做?
例如,在dataTable
中,我们始终可以使用var
绑定对象。为什么我们不能在这里做类似的事情?
答案 0 :(得分:4)
最后,客户端(通常是浏览器)将收到您通常通过.xhtml文件构建的JSF组件树的呈现版本。
例如,浏览器不了解BigDecimals
或Dates
。如果您在表单的输入字段中写入“1.003”,浏览器应该如何知道它是服务器端的String
,float
还是BigDecimal
?它无法知道,也无法解决这个问题。因此,服务器和浏览器之间的通信始终通过Strings
。呈现HTML时,将使用getAsString()
方法。处理传输的表单输入时,JSF将使用getAsObject()
将其转换回实际类型。
为什么var
适用于dataTables?因为在这里你只会“单向”。 dataTable只会显示某些内容,因此可以使用通用的toString()
方法。在这种情况下,不需要转换为Object。
答案 1 :(得分:0)
我将为balusc复制并粘贴一个很好的答案,说明为什么我们应该使用JSF转换器(我不记得问题本身的链接)
JSF生成HTML。 HTML在Java方面基本上是一个大字符串。要在HTML中表示Java对象,必须将它们转换为String。此外,提交HTML表单时,提交的值在HTTP请求参数中被视为String。在封面下,JSF从返回String的HttpServletRequest#getParameter()
中提取它们。在非标准Java对象之间进行转换(即不是EL具有内置转换的String,Number或Boolean)
你必须为你的Entity类提供一个自定义转换器。这个转换器实现了两个方法getAsString()
方法,以便用唯一的字符串表示和getAsObject()
方法表示所需的Java对象,以便HTTP请求参数可以转换回所需的Java对象