我认为这个问题很简单,我得到了错误:
Caused by: java.lang.NullPointerException
at co.edu.unal.bienestar.dao.UserDao.save(UserDao.java:27)
at co.edu.unal.bienestar.facade.UserFacade.createUser(UserFacade.java:18)
at co.edu.unal.bienestar.mb.UserMB.createUser(UserMB.java:40)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
... 27 more
当我尝试使用只有实体类的应用程序创建新用户时:
@Entity
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String username;
private String password;
private Role role;
<here getters and setters>
}
数据访问对象:
public class UserDao {
@PersistenceContext
private EntityManager em;
public void save(User user) {
em.persist(user);
}
public void delete(User user) {
User userToBeRemoved = em.merge(user);
em.remove(userToBeRemoved);
}
public User update(User user) {
return em.merge(user);
}
public List<User> findAll() {
TypedQuery<User> query = em.createQuery(
"SELECT u FROM User u ORDER BY u.id", User.class);
return query.getResultList();
}
}
门面:
public class UserFacade {
private UserDao userDao = new UserDao();
public void createUser(User user) {
userDao.save(user);
}
public List<User> listAll() {
List<User> result = userDao.findAll();
return result;
}
}
用户管理的 Bean:
@SessionScoped
@ManagedBean(name = "userMB")
public class UserMB implements Serializable {
public static final String INJECTION_NAME = "#{userMB}";
private static final long serialVersionUID = 1L;
private User user;
private UserFacade userfacade;
public User getUser() {
if (user == null) {
user = new User();
}
return user;
}
public void setUser(User user) {
this.user = user;
}
public void createUser() {
getUserfacade().createUser(user);
}
public UserFacade getUserfacade() {
if (userfacade == null){
userfacade = new UserFacade();
}
return userfacade;
}
}
最后从 JSF 页面我调用这样的方法:
<f:view>
<h:form>
<h1><h:outputText value="Create/Edit"/></h1>
<h:panelGrid columns="2">
<h:outputLabel value="Username:"/>
<h:inputText id="username" value="#{userMB.user.username}" title="username" />
<h:outputLabel value="Password:" />
<h:inputText id="password" value="#{userMB.user.password}" title="password" />
<h:outputLabel value="ID:" />
<h:inputText id="id" value="#{userMB.user.id}" title="id" />
</h:panelGrid>
<h:commandButton action="#{userMB.createUser}" value="create"/>
</h:form>
</f:view>
我的错误在哪里?