首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Entitymanager抛出NullPointerException

Entitymanager抛出NullPointerException
EN

Stack Overflow用户
提问于 2013-03-19 14:26:09
回答 1查看 1.3K关注 0票数 0

我使用Netbeans.The实体管理器开发JavaEE应用程序时在应用程序中获得空值。不能注射电磁波。我仍然得到一个nullPointerException,因为em在createNamedQuery中得到一个空值。谁能让我知道我错过了什么。

JSP page- index.jsp:

代码语言:javascript
复制
<%@page import="managed.userBean" %>
 <jsp:useBean id="bean" class="managed.userBean" scope="session" />
.....
<input type="submit" value="Submit" onclick="<jsp:scriptlet> bean.validate();</jsp:scriptlet>" /> 

userBean.java

代码语言:javascript
复制
package managed;

import java.io.Serializable;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import session.UserFacade;

@ManagedBean
@SessionScoped


public class userBean implements Serializable {

private String uid, password,role,fname,lname;
private String response="" ;
@EJB
UserFacade userFacade;
....
public String validate() {
    System.out.println("in validate going to user facade:  " + uid + password);
    response = userFacade.validateUser(uid,password);
 .....
}

UserFacade.java

代码语言:javascript
复制
package session;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless

public class UserFacade extends AbstractFacade<User> {
@PersistenceContext (unitName = "ExamSysPU")
public EntityManager em;
String role;

@Override
protected EntityManager getEntityManager() {
    System.out.println("check if em is open");
    return em;
}

public UserFacade() {
    super(User.class);
}


    public String validateUser(String uid, String password) {
     ...
              List results = em.createNamedQuery("User.findByUid").setParameter("uid", uid).getResultList();
   ....
}

Persistence.xml:

代码语言:javascript
复制
   <?xml version="1.0" encoding="UTF-8"?>
  <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
   <persistence-unit name="ExamSysPU" transaction-type="JTA">
      <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <jta-data-source>test</jta-data-source>
      <exclude-unlisted-classes>false</exclude-unlisted-classes>
      <properties/>
  </persistence-unit>
 </persistence>

谢谢,希尔巴

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-20 02:19:35

之所以会出现这个问题,是因为您使用<jsp:useBean>手动创建了UserBean,而不是使用由JSF为您创建和管理的依赖项(并因此自动注入了所有必需的依赖项)。本质上,如果您手动创建和管理bean,那么您也应该手动创建、管理和注入它的依赖项。

停止阅读那些十年前的JSP 1.x教程。在Java EE 6天内,它们不再适用,并且只会让您在这些日子里对正确的方法感到困惑。JSP已经被Facelets (XHTML)所取代。学习一些JSF2/Facelets教程。基本上,您的具体问题可以通过将JSP文件替换为至少包含以下内容的Facelets文件来解决:

代码语言:javascript
复制
<h:form>
    <h:commandButton value="Submit" action="#{bean.validate}" />
</h:form>

另请参阅:

  • Our JSF wiki page -包含一个JSF2/Facelets Hello World启动示例和几个指向sane JSF2 tutorials

的链接

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

https://stackoverflow.com/questions/15492844

复制
相关文章

相似问题

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