首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSTL fmt:格式编号

JSTL fmt:格式编号
EN

Stack Overflow用户
提问于 2013-01-11 15:45:56
回答 3查看 21.8K关注 0票数 3

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

代码语言:javascript
复制
    <%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) %>

它显示为

代码语言:javascript
复制
, , , 1234.6, 19.3

我使用的是JSTL 1.2。到目前为止,我对此并不印象深刻。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-12 03:49:20

您将老式的与EL混合在一起,并期望它们共享相同的变量作用域。这不是真的。EL (那些${}内容)分别在pagerequestsessionapplication作用域中搜索与给定名称匹配的第一个非null属性,并返回它。它不会以任何方式访问scriptlet本地作用域。

基本上,为了让

代码语言:javascript
复制
<%double distance=geo.getDistance(geo.getLatitude(), geo.getLongitude(), lat, lng);%>

作为${distance}提供,您需要在任何所需的EL作用域中设置它,例如请求作用域

代码语言:javascript
复制
<%
  double distance=geo.getDistance(geo.getLatitude(), geo.getLongitude(), lat, lng);
  request.setAttribute("distance", distance);
%>

一旦这样做了,你就可以使用

代码语言:javascript
复制
<fmt:formatNumber pattern="0.0" value="${distance}"/>

顺便说一句,不需要用<c:set>来做消息。

请注意,将scriptlet与EL混合并不是正常的做法。你要么用一个,要么用那个。在这种特殊情况下,Java代码属于预处理servlet class

还要注意,您的具体问题并不是专门与JSTL相关的。你只是指向了一个不存在的变量。

票数 4
EN

Stack Overflow用户

发布于 2013-01-12 03:59:40

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

使用JSTL标签的JSTL code.

  • introduce总是表示“重量级”的代码,变量在JSTL
  • 环境中是不可见的,比如<% ... %>上下文。现在您可以在jsp代码中使用${xx} EL变量了。
  • 我没有将distance2放到上下文中,而是通过<%= .. %>嵌入式java scriptlet使用它。
  • 你甚至可以把只有${EL}的变量引入到重量级的Java端,使用jsp:useBean标签来创建java变量。然后可以看出,在Tomcat中做了一个简单的数学表达式里面的${distanceEL3}值作为例子。
  • 供你参考,如果使用的话请看一下tomcat/work/Catalina/localhost/mywebapp/org/apache/jsp/test_jsp.java文件。您可以看到变量是如何创建的,就像手工编写java文件一样。

test.jsp

代码语言:javascript
复制
<%@ 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) %>
票数 1
EN

Stack Overflow用户

发布于 2013-01-12 03:37:54

我找到了!

代码语言:javascript
复制
<fmt:formatNumber pattern="0.0" value="<%=distance%>"/>

很奇怪,因为我试过

代码语言:javascript
复制
<%= geo.getDistance(geo.getLatitude(), geo.getLongitude(), ${lat}, ${lng}) %>

结果爆炸了。这太让人困惑了!没有在哪里解释优先级更高的是<%%>还是${}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14273795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档