我正在尝试创建一个药品列表,以便添加药品的用户可以看到这些药品,并且只有他自己可以看到,而不会看到其他用户的药品。但是当我登录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调用
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;
}
药品服务
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
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
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);
}
发布于 2020-03-12 16:20:40
问题出在User user_id = (User) request.getSession().getAttribute("user");
行中。您在问题中未提供的User
类未序列化。但是,即使您将其设置为可序列化,我也怀疑它是否会给出您想要的结果。
我认为您的用户id实际上是一个String
。以String
的形式从User
对象中获取用户id,并将其传递到查询中。(即使是int
或long
,情况也是如此。您需要从User
对象中获取它。
类似于
String userIdString = user_id.getId();
如果您在问题中提供您的User
类,我可以更新答案。
https://stackoverflow.com/questions/60639743
复制相似问题