获取fmt中的动态模式:formatNumber

时间:2014-04-03 16:09:21

标签: javascript html jstl

我有以下代码:

我想计算formatNumber的模式,其中包含十进制数。

使用jslt调用:

<td class="TD_Suivi"><fmt:formatNumber type="number" pattern="${getNumberFormatPatern(4)}" value="${toto.montant}" /> </td>

外部JavaScript功能:

function getNumberFormatPatern(nbDecimal) {
    "##,##0.00"
    var numberFormatPattern1="##,";
    var numberFormatPattern2 ="0.";
    for (i = 0; i < nbDecimal; i++) 
    { 
        numberFormatPattern1+="#";
        numberFormatPattern2+="0";
    }
    return numberFormatPattern1+numberFormatPattern2

调用我的javascript函数:

<script language="JavaScript"
    src="<util:WebPath/>/js/commun/jsControle.js"></script>

我有以下错误:

The function getNumberFormatPatern must be used with a prefix when a default namespace is not specified

1 个答案:

答案 0 :(得分:1)

您无法在表达式中调用JavaScript函数。在客户端开始处理页面上的JavaScript之前,容器将使用表达式生成内容,因此容器无法解析表达式以按原样调用函数。

您有两种选择:

  1. 将此逻辑重构为后端
  2. 例如,如果您使用的是servlet,则需要访问此方法:

    private String getNumberFormatPattern(int nbDecimal) {
        String numberFormatPattern1 = "##,";
        String numberFormatPattern2 = "0.";
        for (int i = 0; i < nbDecimal; i++) {
            numberFormatPattern1 += "#";
            numberFormatPattern2 += "0";
        }
        return numberFormatPattern1 + numberFormatPattern2;
    }
    

    然后,您可以通过将表达式与请求相关联来为表达式提供此值:

    request.setAttribute("numberFormatPattern", getNumberFormatPattern(4));
    

    并在表达式中引用它:

    <fmt:formatNumber type="number" pattern="${ numberFormatPattern }" value="${ toto.montant }" />
    
    1. 将该逻辑重构为自定义函数
    2. Here是关于注册和使用自定义功能的直接指南。您只需要使用getNumberFormatPattern()函数替换charAt函数。