我正在开发一个基于 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_num 的 HttpSession 获取的值进行初始化,这是通过以下方式完成的:
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/