JSP标准标签库(JSTL)疑难杂症 —— 格式化失效

项目进中,日期格式化原本这样一直好好的:

 <fmt:formatDate pattern="yyyy-MM-dd" value="${now}" />

结果突然不知道怎么着,有些页面的日期格式化无效了。很诡异,但孤有句名言,代码里百分之百没有诡异的事,看上去越离奇,事实上是自己犯了越二的错。
在网上查了查看,说是时区问题,虽然不知道 怎么着好好的时区,突然就离家出走了。但是加上后确实好了。
最终知道了原因,因为前两天项目老大加了JSP静态化为HTML的功能,用于提速。由于是部分数据变化不大并且访问频繁的页面加了静态化,其它的没有加。所以才会出现,上面说的诡异情况。

<fmt:setLocale value="zh_CN"/>

又过了几天,数字格式化竟然也出翔了:

<fmt:formatNumber  maxFractionDigits="2" value="${goods.shopPrice}" pattern="#.00" />

也是突如其来。不知道 怎么它就失效了,并不是fmt:formatNumber完全挂了,而只是格式化这功能不起作用。
先说解决:还是加上

<fmt:setLocale value="zh_CN"/>

这真是日了狗了,我白搞了一整天。晚上回家蹲坑才想到有可能是它作怪。茅房果然是灵感的十字路口。
再说说我一开始那坑爹的方案:
我添加了个 自定义EL函数,然后发现,加这个容易,但是要把项目中所有 fmt:formatNumber 标签都替换掉,这个工作量有点。。。呵呵。。
自定义标签配置XML

<?xml version="1.0" encoding="utf-8" ?>
<taglib  xmlns="http://Java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <description>A taglib to define some EL accessible functions.</description>
    <tlib-version>1.0</tlib-version>
    <short-name>ELFunctionTaglib</short-name>
    <uri>ELFunctionTagLibrary</uri>

	<function>
		<name>showPrice</name>
		<function-class>com.ahead.core.jsp.ELFunctions</function-class>
		<function-signature>java.lang.String showPrice(java.lang.String , int)</function-signature>
	</function>

</taglib>

JAVA实现代码

package com.ahead.core.jsp;

import java.math.BigDecimal;

/**
 * 自定义EL函数
 * @author walkguitar //这是我们老大
 *
 */
public class ELFunctions {

	/**
	 * 截断小数,保留 scale 位(不足补零),多出部分直接丢弃
	 * @param value 			需要截断的数字
	 * @param maxFractionDigits	 小数点后保留几位
	 * @return String
	 */
	public static String showPrice(String value, int maxFractionDigits){
		if(value == null || "".equals(value)){
			return null;
		}
		try {
			BigDecimal decimal = new BigDecimal(value);
			return decimal.setScale(maxFractionDigits, BigDecimal.ROUND_DOWN).toString();
		} catch (Exception e) {
			log.error(e.getMessage(), e);
			return null;
		}
	}
	
	public static void main(String[] args) throws Exception{
		String s = "";
		s = showPrice("1635135.166", 5);
		System.out.println(s);
		s = showPrice("-1635135.166", 5);
		System.out.println(s);
		s = showPrice("1635135.165", 4);
		System.out.println(s);
		s = showPrice("-1635135.165", 4);
		System.out.println(s);
		s = showPrice("1635135.164", 4);
		System.out.println(s);
		s = showPrice("-1635135.164", 4);
		System.out.println(s);
	}
}

JSP中使用

<%@ taglib prefix="ef" uri="ELFunctionTagLibrary"%>
<div>${ef:showPrice(1.23456, 2)}</div>

具体详情的说明,还是到网上去查查吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笑虾

多情黯叹痴情癫。情癫苦笑多情难

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值