如何使用
<%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。到目前为止,我没有留下深刻印象。
最佳答案
你在混老派 scriptlets与 EL并期望它们共享相同的变量范围。这不是真的。 EL(那些${}
的东西)分别在page中搜索, request , session和 application第一个非 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/