java - JSTL fmt :formatNumber

标签 java jsp jstl el scriptlet

如何使用 格式化变量?我正在学习 JSTL 并从旧的 Struts 标签进行转换。这是行不通的。它无法读取距离变量!

    <%double distance=geo.getDistance(geo.getLatitude(), geo.getLongitude(), lat, lng);%>
    <c:set var="distanceEL" value="${distance}"/>
    ${distance}, 
    <fmt:formatNumber pattern="0.0" value="${distance}"/>, 
    <fmt:formatNumber pattern="0.0" value="${distanceEL}"/>, 
    <fmt:formatNumber pattern="0.0" value="1234.567"/>,
    <%= new java.text.DecimalFormat("0.0").format(distance) %>

显示为

, , , 1234.6, 19.3

我正在使用 JSTL 1.2。到目前为止,我没有留下深刻印象。

最佳答案

你在混老派 scriptletsEL并期望它们共享相同的变量范围。这不是真的。 EL(那些${}的东西)分别在page中搜索, request , sessionapplication第一个非 null 的范围匹配给定名称的属性并返回它。它不会以任何方式访问 scriptlet 本地范围。

基本上,制作

<%double distance=geo.getDistance(geo.getLatitude(), geo.getLongitude(), lat, lng);%>

可用 ${distance} ,您需要在任何所需的 EL 范围内设置它,例如请求范围

<%
  double distance=geo.getDistance(geo.getLatitude(), geo.getLongitude(), lat, lng);
  request.setAttribute("distance", distance);
%>

完成后,您就可以使用

<fmt:formatNumber pattern="0.0" value="${distance}"/>

无需按摩<c:set> , 顺便说一下。

请注意,如前所述,将 scriptlet 与 EL 混合并不是常规做法。你使用一个或另一个。在这种特殊情况下,Java 代码属于预处理 servlet class .

另请注意,您的具体问题与 JSTL 没有特别相关.您只是将它指向一个不存在的变量。

关于java - JSTL fmt :formatNumber,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14273795/

相关文章:

java - 帮助将 ArrayList 与我的结果集一起使用

java - 迭代n层链表Java

java - 从数组中打印唯一值

java - 需要有关 Activity View 和 Admob 的帮助

jquery - 如何查看使用模板生成的 jquerymobile 源代码?

java - 我如何从 HttpServletResponse 获取 header ?

java - jSTL c :set to set a bean property results in argument type mismatch

java - <fmt :message key ="key"/>? 有简写吗

java - spring中使用的代码信息

java - 迭代 HIDDEN channel 中的 token