【问题标题】:How can I correctly execute JSP code to retrieve a value from the HttpSession into a JavaScript function?如何正确执行 JSP 代码以将 HttpSession 中的值检索到 JavaScript 函数中?
【发布时间】:2026-01-29 04:25:01
【问题描述】:

我正在开发一个非常古老的基于 HttpServlet 的旧版 Java Web 应用程序,但在尝试将 JSP 代码运行到 JavaScript 函数时遇到以下问题。

所以,在一个 JSP 页面中,我发现这个 JavaScript 函数给我带来了一些问题:

function rifiuta() {

    document.getElementById('notaRifiuto').value = document.getElementById('myRejectNote').value;

    my_pkcoda = '<%=((request.getSession().getAttribute("doc_num")!=null?((String)request.getSession().getAttribute("doc_num")).trim():""))%>';

    document.getElementById(my_pkcoda).checked = true;
    checkRifiuta();
}

这很简单:

声明一个 **my_pkcoda** 尝试使用从名为 doc_numHttpSession 获得的值进行初始化,这是通过以下方式完成的:

request.getSession().getAttribute("doc_num")

我很确定这个值在 HttpSession 中,因为我将它放入会话中(放入实现我的 HttpServlet 的类中:

req.getSession().setAttribute("doc_num", req.getParameter("pk"));

执行此操作后,我使用调试器检查它是否正确放入会话中,没问题,它已进入会话。

问题是当进入我的 JSP 页面时 rifiuta() JavaScript 函数被执行,当它尝试执行这个语句时:

my_pkcoda = '<%=((request.getSession().getAttribute("doc_num")!=null?((String)request.getSession().getAttribute("doc_num")).trim():""))%>';

我发现 my_pkcoda 值为空。

可能是什么问题?我错过了什么?

Tnx

【问题讨论】:

  • 你可以试试console.log('&lt;%=((request.getSession().getAttribute("doc_num")!=null?((String)request.getSession().getAttribute("doc_num")).trim():""))%&gt;') 看看javascript控制台中显示的内容

标签: java javascript jsp session servlets


【解决方案1】:

JSP scriptlet 标记仅在从服务器加载网页时评估一次。第一次从服务器加载页面时,该 scriptlet 表达式的值将作为文本粘贴到您的 JS 函数中。

在每次调用 JS 函数 rifiuta 时,该值不会从会话中加载。

因此,如果您在单击按钮时调用 rifiuta,您将无法从会话中获取 doc_num 属性的最新值。

【讨论】: