jsf中转换器的用途是什么?

时间:2013-11-04 07:29:25

标签: jsf converter

转换器通常有两种方法getAsObject()getAsString(),它们会将Object转换为字符串或从字符串转换。

为什么我们需要这样做?

例如,在dataTable中,我们始终可以使用var绑定对象。为什么我们不能在这里做类似的事情?

2 个答案:

答案 0 :(得分:4)

最后,客户端(通常是浏览器)将收到您通常通过.xhtml文件构建的JSF组件树的呈现版本。

例如,浏览器不了解BigDecimalsDates。如果您在表单的输入字段中写入“1.003”,浏览器应该如何知道它是服务器端的Stringfloat还是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对象