当前位置 : 主页 > 编程语言 > java >

JSP 标准标签库(JSTL) 疑难杂症

来源:互联网 收集:自由互联 发布时间:2021-06-25
项目进中,日期格式化原本这样一直好好的: fmt:formatDate pattern= "yyyy-MM-dd" value= " ${now} " / 结果突然不知道怎么着,有些页面的日期格式化无效了。很诡异,但孤有句名言,代码里百分之

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

<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){
        BigDecimal decimal = new BigDecimal(value);
        return decimal.setScale(maxFractionDigits, BigDecimal.ROUND_DOWN).toString();
    }

    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>

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

网友评论