Javascript 在fmt:formatNumber中获取动态模式

Javascript 在fmt:formatNumber中获取动态模式,javascript,html,jstl,Javascript,Html,Jstl,我有以下代码: 我想用十进制数计算formatNumber的模式 使用jslt调用: <td class="TD_Suivi"><fmt:formatNumber type="number" pattern="${getNumberFormatPatern(4)}" value="${toto.montant}" /> </td> function getNumberFormatPatern(nbDecimal) { "##,##0.00"

我有以下代码:

我想用十进制数计算formatNumber的模式

使用jslt调用:

<td class="TD_Suivi"><fmt:formatNumber type="number" pattern="${getNumberFormatPatern(4)}" value="${toto.montant}" /> </td>
function getNumberFormatPatern(nbDecimal) {
    "##,##0.00"
    var numberFormatPattern1="##,";
    var numberFormatPattern2 ="0.";
    for (i = 0; i < nbDecimal; i++) 
    { 
        numberFormatPattern1+="#";
        numberFormatPattern2+="0";
    }
    return numberFormatPattern1+numberFormatPattern2

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

你有两个选择:

  • 将该逻辑重构到后端
  • 例如,如果您使用的是servlet,则需要能够访问此方法:

    private String getNumberFormatPattern(int nbDecimal) {
        String numberFormatPattern1 = "##,";
        String numberFormatPattern2 = "0.";
        for (int i = 0; i < nbDecimal; i++) {
            numberFormatPattern1 += "#";
            numberFormatPattern2 += "0";
        }
        return numberFormatPattern1 + numberFormatPattern2;
    }
    
    并在表达式中这样引用它:

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

    谢谢您的回答:)我选择了您的第一个命题。
    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 }" />