首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >已登录用户的WebServlet列表

已登录用户的WebServlet列表
EN

Stack Overflow用户
提问于 2020-03-11 23:44:20
回答 1查看 44关注 0票数 0

我正在尝试创建一个药品列表,以便添加药品的用户可以看到这些药品,并且只有他自己可以看到,而不会看到其他用户的药品。但是当我登录accout,数据库中添加了2种药物,并访问我的servlet /mlist时,我看到“列表中没有药物”,因为我的user_id被分配了0,但我不明白为什么。

//edit“我的request.getSession().getAttribute("user_id");是错误的,因为它没有接受用户会话,正确的是request.getSession().getAttribute("user");

但现在我遇到了新问题PreparedStatementCallback; SQL [SELECT id_medicines, name, drugform, quantity, expiration_date, description, user_id FROM medicines WHERE user_id= ?Invalid argument value: java.io.NotSerializableException; nested exception is java.sql.SQLException: Invalid argument value: java.io.NotSerializableException //

SQL调用

代码语言:javascript
运行
复制
public List<Medicines> findByProperty(String propName, Object propValue) {
        String sql = "SELECT id_medicines, name, drugform, quantity, expiration_date, 
        description, user_id FROM medicines WHERE "+propName+"= ?";
        List<Medicines> medicines = jdbcTemplate.query(sql, new MedicinesRowMapper(), propValue);
        return medicines;
    }

药品服务

代码语言:javascript
运行
复制
public List<Medicines> findUserMedicines(User user_id){
        DAOFactory factory = DAOFactory.getDAOFactory();
        MedicinesDAO medicinesDao = factory.getMedicinesDAO();
        return medicinesDao.findByProperty("user_id", user_id);
    }`

findUserMedicines从DAOFactory获取此行public abstract MedicinesDAO getMedicinesDAO();

Servlet /mlist

代码语言:javascript
运行
复制
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
             {
        medicinesList(request);
        request.getRequestDispatcher("WEB-INF/mlist.jsp").forward(request, response);
    }

    public void medicinesList(HttpServletRequest request) throws ServletException, IOException
    {
        request.setCharacterEncoding("UTF-8");
        MedicinesService medicinesService = new MedicinesService();
        User user_id = (User) request.getSession().getAttribute("user");
        List<Medicines> userMedicines =  medicinesService.findUserMedicines(user_id);
        request.setAttribute("medicines", userMedicines);
    }

LoginFilter

代码语言:javascript
运行
复制
private void saveUserInSession(HttpServletRequest request) {
    UserService userService = new UserService();
    String username = request.getUserPrincipal().getName();
    User userByUsername = userService.getUserByUsername(username);
    request.getSession(true).setAttribute("user", userByUsername);
}
EN

回答 1

Stack Overflow用户

发布于 2020-03-12 16:20:40

问题出在User user_id = (User) request.getSession().getAttribute("user");行中。您在问题中未提供的User类未序列化。但是,即使您将其设置为可序列化,我也怀疑它是否会给出您想要的结果。

我认为您的用户id实际上是一个String。以String的形式从User对象中获取用户id,并将其传递到查询中。(即使是intlong,情况也是如此。您需要从User对象中获取它。

类似于

代码语言:javascript
运行
复制
String userIdString = user_id.getId();

如果您在问题中提供您的User类,我可以更新答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60639743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档