【发布时间】:2014-04-03 16:27:56
【问题描述】:
我正在尝试从我的 JSP 中的数据库中获取一个用户实体,我在其中迭代消息实体。
每条消息都包含其作者 ID。
这是我的 servlet 代码
public class messageServlet extends HttpServlet {
@EJB
private MessageDAO messageDAO;
@EJB
private UserDAO userDAO;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse response)
throws ServletException, IOException {
Long clean_id = Long.valueOf(req.getParameter("id"));
UserEntity user = (UserEntity) req.getSession().getAttribute("me");
if (user == null) {
response.sendRedirect("login.jsp");
} else {
if (clean_id != null) {
List<MessageEntity> messages = messageDAO.findByTopic(clean_id);
if (messages != null) {
req.setAttribute("messages", messages);
req.setAttribute("userDAO", new JpaUserDAO());
req.getRequestDispatcher("/message.jsp").forward(req, response);
}
} else {
req.getRequestDispatcher("/message.jsp").forward(req, response);
}
}
}
还有我的 message.jsp
<%@page import="javax.naming.InitialContext"%>
<%@page import="com.forum.entity.UserEntity"%>
<%@page import="com.forum.dao.jpa.JpaUserDAO"%>
<%@page import="com.forum.entity.MessageEntity"%>
<%@page import="com.forum.dao.UserDAO"%>
<%@page import="javax.ejb.EJB"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Category page</title>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
<script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>
</head>
<body>
<%@ include file="navbar.jsp" %>
<h1>Messages</h1>
<ul>
<c:choose>
<c:when test="${not empty user}">
<li>
<c:forEach items="${messages}" var="message">
<c:out value="${message.getMessage_author_id()}"></c:out>
<c:set var="user" value="${userDAO.find(message.getMessage_author_id())}"></c:set>
<c:out value="${user.getUser_email()}"></c:out>
<c:out value="${message.getMessage_author_id()}"/><br />
<c:out value="${message.getMessage_created()}"/><br />
<c:out value="${message.getMessage_content()}"/><br />
<c:if test="${user_role == 'mod' || user_role == 'admin'}">
<a href="editmessage?id=${message.getMessage_id()}">Edit</a>
<a href="deletemessage?id=${message.getMessage_id()}">Delete</a>
</c:if>
<br /><br />
</c:forEach>
</c:when>
<c:otherwise>
<c:url value="/doLogin" var="loginUrl" />
<a href="${loginUrl}">${message.getMessage_content()}</a>
</c:otherwise>
</c:choose>
</li>
</ul>
</body>
</html>
servlet 中调用的 JpaUsersDAO:
package com.forum.dao.jpa;
import com.forum.dao.UserDAO;
import com.forum.entity.UserEntity;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.NonUniqueResultException;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
/**
*
* @author me
*/
@Stateless
public class JpaUserDAO implements UserDAO {
@PersistenceContext
private EntityManager em;
@Override
public UserEntity find(Long id) {
return em.find(UserEntity.class, id);
}
}
当我在 JSP 中迭代时,对于每条消息,我想使用 JpaUserDAO.find() 获取与消息的作者 ID 对应的用户,以便能够显示作者的信息。 当我尝试这样做时,我在 find() 函数中得到一个 NULL 指针异常,并且无法真正弄清楚如何解决我的问题。
有没有办法让我轻松地做我想做的事?
【问题讨论】:
-
EntityManager没有被注入,因为它没有被创建。看起来您的 persistence.xml 文件有问题。 -
它在其他任何地方都可以使用,我只在我的所有课程中使用 Entitymanagers 注入,它可以在除那里之外的任何地方使用。
标签: java jsp jakarta-ee servlets