有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java会话属性访问和转换为int?

我在Servlet中使用以下命令将用户id存储在会话中:

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语句

共 (4) 个答案

  1. # 1 楼答案

    即使您保存了一个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.
    
  2. # 2 楼答案

    我用了这个:

    Integer.parseInt(session.getAttribute("String").toString())
    
  3. # 3 楼答案

    Integer userid = Integer.parseInt(session.getAttribute("user"));
    
  4. # 4 楼答案

    Java有^{}包装器类,您可以在Integer的对象中存储int值

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