我有以下代码:
我想计算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
答案 0 :(得分:1)
您无法在表达式中调用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;
}
然后,您可以通过将表达式与请求相关联来为表达式提供此值:
request.setAttribute("numberFormatPattern", getNumberFormatPattern(4));
并在表达式中引用它:
<fmt:formatNumber type="number" pattern="${ numberFormatPattern }" value="${ toto.montant }" />
Here是关于注册和使用自定义功能的直接指南。您只需要使用getNumberFormatPattern()
函数替换charAt函数。