调用外部JavaScript文件中的会话变量

Call session variables in external JavaScript file

本文关键字:会话 变量 文件 外部 JavaScript 调用      更新时间:2024-05-31

我正在为我的JSP页面开发一个数字格式转换器。我有一些金额是由脚本操纵的。我有两个会话变量,"userThousandSeparator"answers"userDecimalSeparator",其中包含两个符号,主要是

JSP文件具有以下结构

    <html>
    <body>
    ...
    <span class="list-group-item list-group-item-sm">Instructed amount<span class="pull-right"><em id="instructedAmount"class="numberField">${instructedAmount}</em> <em id="instructedAmountCurrency">${instructedAmountCurrency}</em></span></span>
    <span class="list-group-item list-group-item-sm">Counter value amount<span class="pull-right"><em id="counterValueAmount class="numberField">${counterValueAmount}</em> <em id="counterValueAmountCurrency">${counterValueAmountCurrency}</em></span></span>
    ...
    <script src="js/numberFormatting.js"></script>
    </body>
    </html>

nnumberFormatting.js包含以下代码,用于通过会话变量交换千位和十进制分隔符:

function handleNumericFields(){
            $('.numberField').each(function(){
            var amount = $(this).text();
            var splittedValues = amount.split(/[,.]/);
            amount = "";
            for(var i=0 ; i < (splittedValues.length - 1) ; i++){
                amount += splittedValues[i];
                if(i < (splittedValues.length - 2)) {
                    amount += "${sessionScope.userThousandSeparator}";
                }
            }
            amount += "${sessionScope.userDecimalSeparator}";
            amount += splittedValues[splittedValues.length - 1]
            $(this).text(amount);
        });
}
$( document ).ready(function()   {
    handleNumericFields();
});

现在的问题是,当我在<script>标记之间的jsp中添加这个时,它可以完美地工作。但现在我想将这个脚本添加到一个单独的文件中,这样我就可以将它用于多个jsp,但现在我遇到了问题。

例如,数字500000.00的格式为500${sessionScope.userThousandSeparator}005${sessionScope.userDecimalSeparator}00

为什么我的脚本不再知道会话变量,以及如何解决这个问题?

您的JS脚本将按原样传输到浏览器。由于它不是JSP,所以不能在其中使用EL。显然,它没有被处理,只是在脚本中按原样添加了

你可以选择

  • 定义或多或少的全局变量,并在JS代码中提取它们
  • 将JS代码嵌入HTML页面中,或者至少嵌入可配置的部分,比如对所需函数的调用
  • 更改handleNumericFields函数以接受参数,例如thousandsSeparatordecimalSeparator。甚至只是locale
  • 将JS文件实现为JSP,但您必须小心缓存代理(例如,不推荐)

如果可能的话,我建议将参数引入函数。或者,如果它们只是像"分隔符"这样的类似配置的值,那么您可能会处理全局变量。不漂亮,但能胜任。