Java JSTL fmt:formatNumber

Java JSTL fmt:formatNumber,java,jsp,jstl,el,scriptlet,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 pa

如何使用格式设置变量的格式?我正在学习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) %>
我使用的是JSTL1.2。到目前为止,我还没有印象深刻。

我找到了

<fmt:formatNumber pattern="0.0" value="<%=distance%>"/>

这很奇怪,因为我试过了

<%= geo.getDistance(geo.getLatitude(), geo.getLongitude(), ${lat}, ${lng}) %>

爆炸了。太令人困惑了!没有解释哪一个具有更高的优先级,或者${}

您将旧学校与之混合,并期望它们共享相同的变量范围。事实并非如此。EL(那些
${}
事物)分别在、和范围中搜索与给定名称匹配的第一个非
null
属性并返回它。它不会以任何方式访问scriptlet本地范围

基本上,使

<%double distance=geo.getDistance(geo.getLatitude(), geo.getLongitude(), lat, lng);%>
一旦这样做了,你就可以使用


顺便说一句,不需要用
按摩

注意,a说,将Scriptlet与EL混合不是正常的做法。你用这个或那个。在本例中,该Java代码属于预处理


还要注意的是,您的具体问题并没有具体涉及到。您只是将它指向了一个不存在的变量。

如果要将java变量发布到
${ExpressionLanguage}
中,则必须将其添加到上下文中。有应用程序、会话、请求和页面上下文。这就是我的测试页面中发生的事情

  • 使用
    标记总是表示“重量级”java代码,变量在JSTL代码中不直接可见
  • 将java变量引入JSTL上下文,如pagecontext。现在您可以在jsp代码中使用
    ${xx}
    EL变量
  • 我没有将distance2放在上下文中,而是通过
    嵌入式java scriptlet使用它。有时候,这样做很容易
  • 您甚至可以将
    ${EL}
    -only变量引入重量级java端,使用
    jsp:useBean
    标记创建java变量。然后可以在
    scriptlets中看到它
  • 我在
    ${distanceEL3}
    值中创建了一个简单的数学表达式作为示例
  • 关于您的信息,如果使用Tomcat,请查看
    Tomcat/work/Catalina/localhost/mywebapp/org/apache/jsp/test\u jsp.java
    文件。您可以看到如何创建变量,就像手工编写java文件一样
test.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ 
    taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><%@page 
    contentType="text/plain; charset=UTF-8" pageEncoding="ISO-8859-1"
    import="java.text.*"
%><%

double distance=1234.567;
double distance2=3456.789;
pageContext.setAttribute("distance", distance);

%>Test Results

<fmt:setLocale value="en_US" scope="page"/>

<c:set var="distanceEL" value="${distance}" />
distance=${distance}
fmt1=<fmt:formatNumber pattern="0.0" value="${distance}" />
fmt2=<fmt:formatNumber pattern="0.00" value="${distanceEL}" />
fmt3=<fmt:formatNumber pattern="0.0" value="1234.567" />
fmt4=<%= new DecimalFormat("0.0").format(distance) %>

<c:set var="distanceEL2" value="<%= distance2 %>" />
distance2=${distanceEL2}
fmt1=<fmt:formatNumber pattern="0.0" value="<%= distance2 %>" />
fmt2=<fmt:formatNumber pattern="0.00" value="${distanceEL2}" />
fmt4=<%= new DecimalFormat("0.0").format(distance2) %>

<c:set var="distanceEL3" value="${765.432-2.2}" />
<jsp:useBean id="distanceEL3" type="java.lang.Double" />
distance3=${distanceEL3}
fmt1=<fmt:formatNumber pattern="0.0" value="<%= distanceEL3 %>" />
fmt2=<fmt:formatNumber pattern="0.00" value="${distanceEL3}" />
fmt4=<%= new DecimalFormat("0.0").format(distanceEL3) %>
测试结果
距离=${distance}
fmt1=
fmt2=
fmt3=
fmt4=
距离2=${distanceEL2}
fmt1=
fmt2=
fmt4=
距离3=${distanceEL3}
fmt1=
fmt2=
fmt4=

我试图学习新的标准,但这不起作用:
,也不会有太多的变化。
<%
  double distance=geo.getDistance(geo.getLatitude(), geo.getLongitude(), lat, lng);
  request.setAttribute("distance", distance);
%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ 
    taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %><%@page 
    contentType="text/plain; charset=UTF-8" pageEncoding="ISO-8859-1"
    import="java.text.*"
%><%

double distance=1234.567;
double distance2=3456.789;
pageContext.setAttribute("distance", distance);

%>Test Results

<fmt:setLocale value="en_US" scope="page"/>

<c:set var="distanceEL" value="${distance}" />
distance=${distance}
fmt1=<fmt:formatNumber pattern="0.0" value="${distance}" />
fmt2=<fmt:formatNumber pattern="0.00" value="${distanceEL}" />
fmt3=<fmt:formatNumber pattern="0.0" value="1234.567" />
fmt4=<%= new DecimalFormat("0.0").format(distance) %>

<c:set var="distanceEL2" value="<%= distance2 %>" />
distance2=${distanceEL2}
fmt1=<fmt:formatNumber pattern="0.0" value="<%= distance2 %>" />
fmt2=<fmt:formatNumber pattern="0.00" value="${distanceEL2}" />
fmt4=<%= new DecimalFormat("0.0").format(distance2) %>

<c:set var="distanceEL3" value="${765.432-2.2}" />
<jsp:useBean id="distanceEL3" type="java.lang.Double" />
distance3=${distanceEL3}
fmt1=<fmt:formatNumber pattern="0.0" value="<%= distanceEL3 %>" />
fmt2=<fmt:formatNumber pattern="0.00" value="${distanceEL3}" />
fmt4=<%= new DecimalFormat("0.0").format(distanceEL3) %>