Facelet无法正确转换格式化货币

时间:2010-03-29 15:13:29

标签: jsf input currency facelets converter

我在facelet页面中有以下代码:

<h:inputNumber value="bean.property">
    <f:convertNumber type="currency" />
</h:inputNumber

转换器是因为输入字段中可能存在一种默认值,它来自bean属性。一切都正确呈现。输入字段内的值使用“€”字符呈现(例如“1.453€”。

当我提交表单时出现错误:

"nameOfInputField" konnte nicht als ein Geldbetrag erkannt werden '304,00 â¬'

在英语中它有点像:

"nameOfInputField" could not be regognized as an amount of money '304,00 â¬'

请查看“€”字符。它似乎被打印为“â”。虽然在提交表单之前它已正确呈现,但现在它在错误消息内部和输入字段内部看起来像“â”。

所有页面均以UTF-8编码。

出现此错误的原因是什么? 怎么解决它?

提前致谢

2 个答案:

答案 0 :(得分:1)

  

â¬

这对于使用ISO-8859-1错误解码的原始UTF-8来源来说是典型的。这是一个小片段,演示了:

System.out.println(new String("€".getBytes("UTF-8"), "ISO-8859-1"));
  

所有页面均以UTF-8编码。

您可能正在谈论响应编码。您还需要设置请求编码。

要设置GET请求的编码(基本上是:URI编码),您需要查阅appserver特定的文档。由于目前还不清楚你正在使用哪一个,这里有一个Tomcat目标示例:<Connector URIEncoding="UTF-8" />。要设置POST个请求的编码,您需要创建一个简单的过滤器request.setCharacterEncoding("UTF-8"),如果它是null。可以在this article中找到更多背景信息和提示。

答案 1 :(得分:1)

将它放在facelets页面上:

<?xml version="1.0" encoding="UTF-8" ?>

它将指示facelets解析器。