文章目录

1.引子

在做项目中,发现了一个诡异的事情,后台的long型数字不能正确地在前端页面显示。经过我的反复排查问题,总算是找到了问题原因所在,希望能帮助到大家,让大家少走弯路。

2.解决问题

(1)初试EL表达式取long型数值

后台java代码设置属性

         BlogDetail currentBlog = pageModel.getDataArray().get(0);
//request中设置属性,以供前端页面获取
request.setAttribute("curBlog", currentBlog);
int categoryId = currentBlog.getCategoryId();
//打印博客的long型id
Long blogId = currentBlog.getId();
System.out.println("单篇博客id"+blogId);

前端页面的html及js脚本

<button type="button" style="margin-left: 100px"
onclick="deleteBlog(${curBlog.id})"
class="layui-btn layui-btn-primary layui-btn-sm">
<i class="layui-icon"></i> </button>
<script type="text/javascript">
function deleteBlog(id) {
alert(id);
return;
/**
if (!confirm("确定要删除这篇博客吗?")) {
return;
}
$.ajax({
type: "POST",
url: "<%=basePath%>blogDetailServlet?action=delete",
data: { "id": id },
success: function (result) {
if (result == 1) {
alert("当前博客删除成功"); if ($("#currPage").val() == 1){
location.href = "<%=basePath%>blogDetailServlet?action=showOne";
} else {
location.href = "<%=basePath%>blogDetailServlet?action=showOne&currentPage=${pager.currentPage-1}";
}
} else {
alert("当前博客删除失败");
}
}
}); */
}
</script>

控制台打印出的博客id

前端页面弹出的提示窗口的博客id

可以明显看出两者的值不一样,后台实际设置的值是156231237764100358 ,而前端页面获取到的值是156231237764100350,前端将后台传过来的长整型数值的最后一位数视为’0’ 。

(2)再探EL表达式取字符串格式long型数值

起初我以为是long型数字太长不能在页面中显示,后来我又用字符串型的数字来测试,然而结果仍然很失望。
后台java代码设置字符串格式的长整数字的属性

    BlogDetail currentBlog = pageModel.getDataArray().get(0);
request.setAttribute("curBlog", currentBlog);
int categoryId = currentBlog.getCategoryId();
//打印博客的long型id
Long blogId = currentBlog.getId();
System.out.println("单篇博客id"+blogId);
//在requeset中设置字符串格式的长整数字
request.setAttribute("blogId",blogId+"" );

jsp页面代码

<button type="button"    onclick="javascript:alert(${blogId})"      class="layui-btn layui-btn-primary" >
<i class="layui-icon">长整数测试</i>
</button>

新的弹窗

从前端页面的提示窗口来看,使用字符串形式的长整数字仍不能正常显示。如果前端一直不能正常显示长整型的数字,这将是一个巨的灾难,毕竟谁也不能保证一直不在前端使用大数字。

(3)最后一试----给EL表达式加引号

后来看到在超链接中同样使用EL表达式却能跳转到正确的页面。这引起了我的兴趣,我估计是用因为在超链接中用了引号的原因。在超链接的href属性的内容必须用引号包裹起来,而整个超链接使用了双引号,那么href 属性的内容(即链接地址)则只能用单引号了。

而以上示例中调用Javascript脚本方法时,其中却只有一个外部的双引号,而无单引号。

准备尝试在EL表达式两侧加上单引号

<!--onclick事件的脚本方法,对EL表达式两侧加上单引号-->
<button type="button" onclick="javascript:alert('${blogId}')" class="layui-btn layui-btn-primary" >
<i class="layui-icon">长整数测试</i>
</button>

前端页面显示出正确的long型数字

3.总结

EL表达式很好用,但有的时候也得注意一些小细节。在获取比较小的数字或位数较短的数字时,可以不用引号将EL表达式包含起来,但在获取位数较长的long型数字时,要注意一定得使用引号(" "或’ ')将EL表达进包裹起来,防止获得尾数充零的的错误值。

long型长整数字在前端页面显示异常及其解决方法的更多相关文章

  1. nginx+php-fpm配置后页面显示空白的解决方法(yum形式的安装)

    OS: Ubuntu 15.04 由于nginx与php-fpm之间的一个小bug,会导致这样的现象: 网站中的静态页面 *.html 都能正常访问,而 *.php 文件虽然会返回200状态码, 但实 ...

  2. nginx+php-fpm页面显示空白的解决方法

    在nginx与php的环境中,配置了一个wordpress,访问时发现php的页面一直显示空白,起初以为是权限问题,将权限改成755后还是不行.   然后,开启nginx和php的日志,但在日志里也没 ...

  3. nginx+php-fpm配置后页面显示空白的解决方法以及用nginx和php-fpm解决“502 Bad Gateway”问题

    For reference, I am attaching my location block for catching files with the .php extension: location ...

  4. 关于FusionCharts图表宽度width的设置问题导致图表显示异常的解决办法

    关于FusionCharts图表宽度width的设置问题导致图表显示异常的解决办法 题设: 经常使用FusionCharts图表的朋友可能会遇到这个问题.就是在FusionCharts显示的时候有时候 ...

  5. ubuntu下mysqli_connect()显示未定义,mysqli_fetch_all()显示未定义 解决方法

    mysqli_connect()显示未定义解决方法: http://www.cnblogs.com/misoag/archive/2013/01/24/2874439.html 让apache.php ...

  6. photoshop菜单显示不全的解决方法

    photoshop菜单显示不全? 解决方法,选择菜单 编辑->菜单,下拉菜单选择photoshop默认值

  7. SVN 不显示状态图标--解决方法

    [SVN 不显示状态图标--解决方法] 在名字前面加空格, 三个六个空格随意: 参考:https://www.cnblogs.com/lzpong/p/6187366.html

  8. Python3:读取配置dbconfig.ini(含有中文)显示乱码的解决方法

    Python3:读取配置dbconfig.ini(含有中文)显示乱码的解决方法 一.原因 Python 3 中虽有encoding 参数,但是对于有BOM(如Windows下用记事本指定为utf-8) ...

  9. SecureCRT中某些命令提示符下按Backspace显示^H的解决方法

    SecureCRT中某些命令提示符下按Backspace显示^H的解决方法 安装了Apache Derby数据库服务器之后,使用ij客户端去连接derby服务端,可是在ij中输入命令的时候,每当输入错 ...

随机推荐

  1. 长篇Essay写作凑字数的小技巧

    当一个留学党面对一篇5000字的essay,写一半之后却没法继续~这类的感觉是很多同学无法想象的!此时唯一的一个有效的方法:凑字数!但是essay写作怎么凑字数呢?如何写够5000字essay?下面我 ...

  2. 十二、React 生命周期函数

    React生命周期函数: [官方文档]:https://reactjs.org/docs/react-component.html [定义]组件加载之前,组件加载完成,以及组件更新数据,组件销毁. 触 ...

  3. Node.js NPM 教程

    NPM是Node.js的包(或模块)管理器,是Node.js应用程序开发的核心. www.npmjs.com上有海量的Node.js包,供免费下载使用. 当安装Node.js时,NPM程序会被同时安装 ...

  4. html 基础 (9.19 第八天)

    一.HTML:超文本标记语言,是一种标签语言,不是编程语言,显示数据有双标签<body></body> 和单标签<img src=# / >, 标签大小写都可以通过 ...

  5. UVA - 11806 Cheerleaders (容斥原理)

    题意:在N*M个方格中放K个点,要求第一行,第一列,最后一行,最后一列必须放,问有多少种方法. 分析: 1.集合A,B,C,D分别代表第一行,第一列,最后一行,最后一列放. 则这四行必须放=随便放C[ ...

  6. UVA - 714 Copying Books (抄书)(二分+贪心)

    题意:把一个包含m个正整数的序列划分成k个(1<=k<=m<=500)非空的连续子序列,使得每个正整数恰好属于一个序列(所有的序列不重叠,且每个正整数都要有所属序列).设第i个序列的 ...

  7. CSS - 导入Google Web 字体

    @import url('http://fonts.googleapis.com/css?family=Poppins:100,200,300,400,500,600,700,800,900'); b ...

  8. JSP页面获取其他页面传递的参数

    jstl表达式获取方式: ${param.pid} el表达式获取方式: ${requestScope.attr}  el表达式获取方式: ${attr} ---------------------- ...

  9. No enclosing instance of type test is accessible. Must qualify the allocation with an enclosing inst

    今日遇到一个报错如下: No enclosing instance of type test is accessible. Must qualify the allocation with an en ...

  10. API网关,让您和Serverless再近一步

    从软件行业诞生之日起,技术和业务总是相辅相成.业务的创新促进着软件架构从最早期的单体架构.分布式架构,转变到了如今火热的微服务架构,以及云时代下诞生的Serverless架构.API网关作为单体应用和 ...