java - 如何正确执行 JSP 代码以将 HttpSession 中的值检索到 JavaScript 函数中?

标签 java javascript jsp session servlets

我正在开发一个基于 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 中,因为我将其放入 session 中(放入实现我的 HttpServlet 的类中:

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

完成此操作后,我使用调试器检查它是否正确放入 session 中,没有问题,它已放入 session 中。

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

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

我发现 my_pkcoda 值为 null。

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

Tnx

最佳答案

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

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

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

关于java - 如何正确执行 JSP 代码以将 HttpSession 中的值检索到 JavaScript 函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30298187/

相关文章:

jsp - Tomcat下部署javabean是否必须使用webapps/ROOT文件夹

java - 如何根据其符号名称检索 Bundle?

javascript - 使用 Cypress 连接到 SQL DB

javascript - 通过将其长度设置为零来释放数组内存是一种好习惯吗?

c# - 在计时器上刷新 Gridview 但保持扩展 div 的状态

java - jsp获取http错误描述

java - Tomcat 6 在 tomcat 中包含 glassfish 3 服务器 jar 文件后显示错误

java - 为什么 Java 类型 `UNIXProcess` 在我的系统上不可见?

java - 预期情况无法解决

java - 分形地形生成问题