49

我有一个用于编辑某些用户信息的 JSP 页面。当用户登录网站时,我将信息保留在会话中,然后在我的编辑页面中尝试以下操作:

<%! String username=session.getAttribute("username"); %>
<form action="editinfo" method="post">
    <table>
        <tr>
            <td>Username: </td><td> <input type="text" value="<%=username %>" /> </td>
        </tr>
    </table>
</form>

但它给出了错误说会话无法解决。我能做些什么呢?

4

7 回答 7

101

JSP隐式对象 likesession等在 JSP 声明标记request内不可用。<%! %>

你可以直接在你的表达中使用它

<td>Username: </td>
<td><input type="text" value="<%= session.getAttribute("username") %>" /></td>

另一方面,在 JSP 中使用 scriptlet 早已被弃用。强烈建议使用 EL(表达式语言)和 JSTL 标签。例如,在这里您可以使用 EL 作为

<td>Username: </td>
<td><input type="text" value="${username}" /></td>

最好的部分是范围解析是自动完成的。因此,这里的用户名可以按顺序来自pagerequestsessionapplication范围。如果对于特定实例由于名称冲突而需要覆盖它,则可以将范围明确指定为

<td><input type="text" value="${requestScope.username}" /></td> or,
<td><input type="text" value="${sessionScope.username}" /></td> or,
<td><input type="text" value="${applicationScope.username}" /></td>
于 2013-07-02T07:25:19.303 回答
13

采用

<% String username = (String)request.getSession().getAttribute(...); %>

请注意,您的使用<%! ... %>被翻译为类级别,但 request 仅在service()已翻译 servlet 的方法中可用。

了解如何将 JSP 代码转换为 servlet。

于 2013-07-02T07:23:24.050 回答
9

您收到编译错误的原因是,您试图访问声明块 ( <%! %>) 中不可用的会话。jsp 的所有隐式对象仅在 service 方法中可用。声明性块的代码超出了服务方法。

我建议你使用 EL。这是一种简化的方法。

${sessionScope.username}会给你想要的输出。

于 2013-07-02T07:29:28.607 回答
0

假设您想在任何其他网页中使用 ID,那么您可以通过以下代码片段来实现:

String id=(String)session.getAttribute("uid");

这里 uid 是您之前存储 ID 的属性。您可以通过以下方式设置它:

session.setAttribute("uid",id);
于 2019-04-04T14:26:23.767 回答
-1
<%! String username=(String)session.getAttribute("username"); %>
form action="editinfo" method="post">

    <table>
        <tr>
            <td>Username: </td><td> <input type="text" value="<%=username %>" /> </td>
        </tr>

    </table>

添加<%! String username=(String)session.getAttribute("username"); %>

于 2013-07-02T07:27:42.150 回答
-1

您可以直接使用 (String)session.getAttribute("username"); 在 scriptlet 标记内,即 <% %>。

于 2013-07-02T12:17:45.617 回答
-1

form action="editinfo" method="post">
<table>
  <tr>
    <td>Username:</td>
    <td>
      <input type="text" value="<%if( request.getSession().getAttribute(" parameter_whatever_you_passed ") != null
{
request.getSession().getAttribute("parameter_whatever_you_passed ").toString();
}
 %>" />
    </td>
  </tr>
</table>
</form>

于 2015-02-22T15:41:40.633 回答