【问题标题】:Call session variables in external JavaScript file在外部 JavaScript 文件中调用会话变量
【发布时间】:2016-04-12 20:29:39
【问题描述】:

我正在为我的 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>

numberFormatting.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();
});

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

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

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

【问题讨论】:

    标签: javascript jsp session


    【解决方案1】:

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

    你可以

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

    如果可能,我建议将参数引入函数。或者,如果它们只是像“分隔符”这样的类似配置的值,您可能会与全局变量相处。不漂亮,但可以。

    【讨论】:

      猜你喜欢
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 2020-07-11
      • 2023-03-21
      • 2019-07-31
      • 1970-01-01
      • 2018-11-07
      • 2017-07-08
      相关资源
      最近更新 更多