You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:24:59