从Java方法传值到JSP页面遇问题:Countrow返回null求帮助
问题排查与解决:Java变量传递到JSP后获取为null
核心错误:属性获取方式不匹配
你在Java代码中通过request.setAttribute("Countrow", Countrow)将值存入请求域属性,但JSP里却用request.getParameter("Countrow")尝试获取——这两个方法的作用完全不同:
setAttribute/getAttribute:用于在服务器内部的请求域中传递数据,仅适用于请求转发场景。getParameter:用于获取HTTP请求的外部参数(如表单提交、URL拼接的参数),和请求域属性无关。
修正后的JSP代码
将JSP中的获取方式改为getAttribute,并进行类型转换:
<% String val = (String) request.getAttribute("Countrow"); out.println("Total test reviewed : " + val); %>
额外排查点:请求跳转方式是否正确
如果Java代码所在的Servlet使用response.sendRedirect("xxx.jsp")重定向到JSP,请求域中的属性会直接丢失——因为重定向是客户端发起新请求,原request对象已销毁。
- 若为服务器内部跳转,改用请求转发:
request.getRequestDispatcher("目标页面.jsp").forward(request, response); - 若需要跨请求传递数据,改用session存储:
// Java代码中存储 session.setAttribute("Countrow", Countrow); // JSP中获取 String val = (String) session.getAttribute("Countrow");
结果集处理优化(非null原因,但建议调整)
COUNT(*)查询只会返回一行结果,无需使用while循环,改为if判断即可:
String strQuery = "SELECT COUNT(*) FROM public.acsis_lab_test_results where reviewed = true"; ResultSet rs = st.executeQuery(strQuery); String countrow = ""; if (rs.next()) { countrow = rs.getString(1); System.out.println("Total test reviewed : " + countrow); request.setAttribute("Countrow", countrow); } // 务必关闭资源,避免内存泄漏 rs.close(); st.close();
内容的提问来源于stack exchange,提问作者user2791420
相关产品推荐
相关产品推荐

