【发布时间】:2020-01-01 04:14:33
【问题描述】:
我正在为工作申请提出挑战。本质上,我需要使用 Java、Maven、JSP 和 JPA 和 Hibernate 来制作 CRUD。每次我尝试在数据库中获取我的咨询的结果列表时,都会返回此错误。 “id”在 DB 中定义为 int。
"ago 27, 2019 9:45:18 PM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException
GRAVE: Error Rendering View[/home.xhtml]
java.lang.NumberFormatException: For input string: "id"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)[...]"
"ago 27, 2019 9:45:18 PM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [Faces Servlet] in context with path [/desafiosefaz] threw exception [For input string: "id"] with root cause
java.lang.NumberFormatException: For input string: "id"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)[...]"
我尝试过使用long类型来改变User类中id的类型,但是还是出现错误,我真的不知道是怎么回事。
那是用户
package desafiosefaz.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="usuarios")
public class User {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
@Column
private String login;
@Column
private String nome;
@Column
private String email;
@Column
private String senha;
public Long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getLogin() {
return login;
}
public void setLogin(String login) {
this.login = login;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
@Override
public String toString() {
return "User [id=" + id + ", nome=" + nome + ", login=" + login + ", email=" + email + "]";
}
}
这就是我的 DAO
public List<User> listarUsuarios() {
List<User> listaUsuarios = new ArrayList<>();
Query q = entity.createQuery("SELECT id, nome, login, email FROM User ORDER BY nome DESC");
listaUsuarios = q.getResultList();
return listaUsuarios;
}
这就是豆子
public List<User> listarUsuarios() {
UserDAO userDAO = new UserDAO();
return userDAO.listarUsuarios();
}
这就是xhtml
<h:dataTable value="#{userBean.listarUsuarios()}" var="usuario" border="1">
<h:column>
<f:facet name="header">ID</f:facet>
<h:outputText type="int" value="#{usuario.id}"></h:outputText>
</h:column>
<h:column>
<f:facet name="header">Nome</f:facet>
<h:outputText value="#{usuario.nome}"></h:outputText>
</h:column>
<h:column>
<f:facet name="header">Login</f:facet>
<h:outputText value="#{usuario.login}"></h:outputText>
</h:column>
</h:dataTable>
我希望 ID 会像往常一样出现在表格中。
【问题讨论】:
-
a)
Userbean 是什么样的? b)id在 DB 中是如何定义的? -
用户看起来像这样 ``` @Entity @Table(name="usuarios") public class User { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; ``` 并且“id”在数据库中被定义为int。
-
只是一个简短的猜测:它与 JPA 无关,但与一些 JSF 绑定有关。添加更多的堆栈跟踪会很好。您使用的是哪个 JSF 版本,我从未见过
h:outputText的type属性?请在发布其他信息之前阅读帮助 - 您知道您可以编辑您的问题吗?
标签: java mysql hibernate jsp jpa