【问题标题】:How use the functionality of <fmt:formatNumber ...> in Servlet如何在 Servlet 中使用 <fmt:formatNumber ...> 的功能
【发布时间】:2014-04-11 17:20:03
【问题描述】:

在我的基于 jstl 的网站上,我使用以下标签来显示价格:

<fmt:formatNumber value="10" minFractionDigits="2" maxFractionDigits="2" currencySymbol="$"/>

这个标签效果很好,因为它甚至可以用本地设置格式化货币。

但是,我现在想结合使用 Ajax 和 Java Servlet 来更新这个值。所以我基本上需要的是一种在我的 Servlet 中“使用”这个标签的方法。

我实际上尝试通过查看源代码来重建功能:http://grepcode.com/file/repo1.maven.org/maven2/javax.servlet/jstl/1.2/org/apache/taglibs/standard/tag/rt/fmt/FormatNumberTag.java

但事实证明这很乏味,所以我想知道是否有更优雅的解决方案。

【问题讨论】:

  • 为什么不将 JSP 与 servlet 结合使用来呈现 AJAX 响应?
  • 一个很好的例子说明如何做到这一点
  • 您在 servlet 中计算您的值,将它们放入请求上下文中,然后转发给 JSP 进行渲染。例如谷歌“从 servlet 调用 jsp”。
  • 这意味着我必须编写一个 JSP 模板,它可以从请求属性中解析 JSON,并且有一些神奇的方法可以从属性名称派生是否对其应用数字格式。我认为并不是那么优雅。
  • 嗯,对不起,我不明白。为什么您的 JSP 模板应该解析 JSON 输入?首先调用您的 servlet。无论如何,它必须解析 JSON。然后 servlet 处理输入数据,产生一些内部状态,通常称为模型。只有从模型中创建适当输出格式的部分不同。而是在 servlet 中执行此操作,您将模型转发到 JSP 以创建输出。您的 servlet 如何知道何时进行数字格式化?您可以将相同的算法应用到您的 JSP 中。

标签: java ajax jsp servlets jstl


【解决方案1】:

使用 Java 的 NumberFormat (Javadocs)。对于格式化货币,只需执行

NumberFormat fmt = NumberFormat.getCurrencyInstance(); // optionally provide a Locale
// optionally set currency, if different than the default for the selected locale
fmt.setCurrency(...);
String formattedNumber = fmt.format(...);

【讨论】:

  • 问题在于获取正确的区域设置并覆盖货币符号。我尝试了 request.getLocale() 但这不起作用:我仍然得到不同的格式。
猜你喜欢
  • 2014-07-08
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多