会话属性访问并转换为 int?

新手上路,请多包涵

我在 Servlet 中使用以下命令将用户 ID 存储在 Session 中:

 HttpSession session = request.getSession();
session.setAttribute("user", user.getId());

现在,我想从另一个 Servlet 访问该用户 ID:

 HttpSession session = request.getSession(false);
int userid = (int) session.getAttribute("user"); // This is not working

OR

User user = new User();
user.setId(session.getAttribute("user")); This ain't possible (Object != int)

问题:

  1. 我如何转换为 int 并将 id 发送到 DAO 以进行 SELECT 语句

原文由 a k 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 366
2 个回答

即使您保存了一个 int ,该方法需要一个对象,所以您的 int Integer 由于自动装箱将变成 —。尝试将其转换回 Integer 应该没问题:

 int userid = (Integer) session.getAttribute("user");

但是,如果该属性为空,您将在此处获得 NullPointerException ,因此最好始终使用 Integer

 Integer userid = (Integer) session.getAttribute("user");

在此之后,您可以安全地检查 userid 是否为 null


编辑:为了回应您的评论,这就是我所说的“检查是否为空”的意思。

 Integer userid = (Integer) session.getAttribute("user");
User user = null;
if (userid != null) {
    user = new UserDAO().getUser(userid);
}
// here user will be null if no userid has been stored on the session,
// and it wil be loaded from your persistence layer otherwise.

原文由 Costi Ciudatu 发布,翻译遵循 CC BY-SA 3.0 许可协议

Java有 Integer 包装类,你可以将int值存储在 Integer 的对象中

//setting
Integer intObj = new Integer(intVal);
session.setAttribute("key",intObj);
//fetching
Integer intObj = (Integer) session.getAttribute("key");

原文由 jmj 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题