从request.getSession获取属性值,JSP显示companyName的代码是否正确?
修正你的JSP代码问题
嘿,我来帮你捋捋这段代码里的问题~ 你当前的写法存在一个核心问题:用Scriptlet(<% %>)定义的compName是局部变量,而EL表达式${compName}是从页面、请求、会话、应用这几个作用域里查找属性的,它没法直接访问Scriptlet里的局部变量,所以现在的代码大概率拿不到你想要的companyName值。
给你两种实用的修正方案:
方案1:兼容现有写法,把变量存入作用域
如果不想大幅改动现有代码,可以在定义完compName后,把它存入页面作用域,这样EL就能顺利访问到了:
<% String compName = (String)request.getSession().getAttribute("companyName"); pageContext.setAttribute("compName", compName); // 新增这行,把变量存入作用域 %> <form id="apForm"> <input type="hidden" name="companyName" value="<c:out value="${compName}" />" /> <!-- 其他表单元素 --> </form> <script> $('#myLink').on('click', function() { $('#apForm').submit(); }); </script>
方案2:直接用EL访问Session属性(更简洁规范)
其实完全可以跳过Scriptlet,直接用EL表达式从Session作用域里取companyName,这种写法更符合现代JSP开发规范,也更简洁:
<form id="apForm"> <!-- 用sessionScope明确指定从会话作用域取值,也可以省略sessionScope,EL会自动按顺序查找作用域 --> <input type="hidden" name="companyName" value="<c:out value="${sessionScope.companyName}" />" /> <!-- 其他表单元素 --> </form> <script> $('#myLink').on('click', function() { $('#apForm').submit(); }); </script>
最后补充个小细节:你用<c:out>标签的做法很赞,它能自动处理特殊字符,防止XSS攻击,继续保持就好~
内容的提问来源于stack exchange,提问作者Mdhar9e
相关产品推荐
相关产品推荐

