我正在尝试使用 JPA 和 JSF 实现简单的列表和编辑页面,但是尽管数据库中有 4 条记录,但列表没有返回任何行。堆栈跟踪中没有错误,因此我很难找到根本原因。这一次,我可以说没有调用 init 方法。你们能帮我一把吗?
Usuario.java
package br.com.jpajsf.model.entity;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Usuario {
@Id
@GeneratedValue
private int idUsuario;
private String dsIdentificador;
private String dsSenha;
private String dsSal;
private String dsNome;
private String dtNascimento;
// getters, setters, hashCode e equals.
UsuarioServices.java
package br.com.jpajsf.persistence;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import br.com.jpajsf.model.entity.Usuario;
@Stateless
public class UsuarioServices {
@PersistenceContext
private EntityManager em;
public List<Usuario> getUsuarios() {
return em.createQuery("select u from Usuario u", Usuario.class)
.getResultList();
}
public Usuario find(String id) {
return em.find(Usuario.class, Integer.parseInt(id));
}
public void persist(Usuario u) {
em.persist(u);
}
}
UsuarioBean.java
package br.com.jpajsf.domain;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import br.com.jpajsf.model.entity.Usuario;
import br.com.jpajsf.persistence.UsuarioServices;
@ViewScoped
@Named
public class UsuarioBean {
@Inject
private UsuarioServices usuarioServices;
private Usuario usuario;
private List<Usuario> usuarios;
@PostConstruct
public void init() {
Map<String, String> params = FacesContext.getCurrentInstance()
.getExternalContext().getRequestParameterMap();
if (!params.isEmpty()) {
try {
usuario = usuarioServices.find(params.get("idUsuario"));
} catch (NumberFormatException e) {
}
}
if (usuario == null) {
usuario = new Usuario();
}
setUsuarios();
}
public List<Usuario> getUsuarios() {
if (usuarios == null) {
setUsuarios();
}
return usuarios;
}
public void setUsuarios() {
this.usuarios = usuarioServices.getUsuarios();
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
public String salvar(Usuario u) {
usuarioServices.persist(u);
return "listar";
}
}
listar.xhtml
<h:head>
<title>Cadastro de usuários</title>
</h:head>
<h:body>
<h:form>
<h:dataTable value="#{usuarioBean.usuarios}" var="usuario" border="1">
<h:column>
<f:facet name="header">ID</f:facet>
#{usuario.idUsuario}
</h:column>
<h:column>
<f:facet name="header">Email</f:facet>
#{usuario.dsIdentificador}
</h:column>
<h:column>
<f:facet name="header">Senha</f:facet>
#{usuario.dsSenha}
</h:column>
<h:column>
<f:facet name="header">Sal</f:facet>
#{usuario.dsSal}
</h:column>
<h:column>
<f:facet name="header">Nome</f:facet>
#{usuario.dsNome}
</h:column>
<h:column>
<f:facet name="header">Data Nascimento</f:facet>
#{usuario.dtNascimento}
</h:column>
<h:column>
<f:facet name="header">Opções</f:facet>
<h:commandLink value="editar" action="editar?faces-redirect=true&includeViewParams=true">
<f:setPropertyActionListener target="#{usuarioBean.usuario.idUsuario}" value="#{usuario.idUsuario}"/>
</h:commandLink>
</h:column>
</h:dataTable>
</h:form>
</h:body>
</html>
已经谢谢了!