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

时间:2016-04-12 10:00:12

标签: javascript jsp session

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

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>

n umberFormatting.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&#39; s, 但现在我遇到了问题。

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

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

1 个答案:

答案 0 :(得分:1)

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

你可以

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

如果可能,我建议将参数引入该功能。或者,如果它们只是像“分隔符”那样的类似配置的值,那么您可能会得到全局变量。不漂亮,但做的工作。