Question:
Hey guys! I have a problem to populate a DataTable, I'm using JSf, CDI.
I believe the teacher 's name is coming normal since he is an object and the student is a List
, but I don't know how to solve this. I'm trying to get the nome
attribute in the Usuario
class that belongs to the Aluno
as follows:
GestaoProjetosBean
(my projects bean) -> Aluno.java
-> Usuario.java
-> nome
And I get the following error:
Nov 12, 2017 6:42:24 PM com.sun.faces.application.view.FaceletViewHandlingStrategy handleRenderException SEVERE: Error Rendering View[/pages/Project Management.xhtml] java.lang.NumberFormatException: For input string: "user" at java .lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at javax.el.ListELResolver.coerce(ListELResolver.java:150) at javax.el.ListELResolver.getValue(ListELResolver.java:67) at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) at com.sun.faces.el.DemuxCompositeELResolver.getjavasite:ELResolver. 203) at org.apache.el.parser.AstValue.getValue(AstValue.java:169) at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184) at org.jboss.weld.el.WeldValueExpression.getValue (WeldValueExpression.java:50) at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) at javax.faces.co mponent.ComponentStateHelper.eval(ComponentStateHelper.java:194) at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) at javax.faces.component.UIOutput.getValue(UIOutput.java:174) at com.sun .faces.renderkit.html_basic.HtmlBasicInputRenderer.getValue(HtmlBasicInputRenderer.java:205) at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:35.html) at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java. .encodeEnd(HtmlBasicRenderer.java:164) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:920) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863) at org.primefaces.component. column.Column.renderChildren(Column.java:352) at org.primefaces.component.datatable.DataTableRenderer.encodeCell(DataTableRenderer.java:1051) at org.primefaces.component.datatable.DataTableRenderer.encodeRow(DataTableRenderer.java:999) at org.primefaces.component.datatable.DataTableRenderer.encodeRows(DataTableRendere r.java:907) at org.primefaces.component.datatable.DataTableRenderer.encodeTbody(DataTableRenderer.java:854) at org.primefaces.component.datatable.DataTableRenderer.encodeTbody(DataTableRenderer.java:814) at org.primefaces.component .datatable.DataTableRenderer.encodeRegularTable(DataTableRenderer.java:290) at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:252) at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:252) ) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:920) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863) at javax.faces.render.Renderer.encodeChildren(Renderer.java: 176) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:890) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856) at javax.faces.component.UIComponent.encodeAll(UIComponent.java) :1859) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:458) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:134) at javax.faces.application.ViewHandlerWra .renderView(ViewHandlerWrapper.java:337) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) at com.sun. faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:659) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter .doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Application FilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) at org.apache.catalina .core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve. ) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) at org.apache.catalina.core.StandardEngineValve. invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799) at org.apache .coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$Conne ctionHandler.process(AbstractProtocol.java:861) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase. java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run (TaskThread.java:61) at java.lang.Thread.run(Unknown Source)
Nov 12, 2017 6:42:24 PM com.sun.faces.context.ExceptionHandlerImpl log FATAL: JSF1073: java.lang.NumberFormatException caught while processing RENDER_RESPONSE 6: UIComponent-ClientId=, Message=For input string: "user " Nov 12, 2017 6:42:24 PM com.sun.faces.context.ExceptionHandlerImpl log FATAL: For input string: "user" java.lang.NumberFormatException: For input string: "user" at java.lang.NumberFormatException. forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at javax.el.ListELResolver.coerce(ListELResolver.java:150) at javax.el.ListELResolver .getValue(ListELResolver.java:67) at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176) at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.org.java:203) at . apache.el.parser.AstValue.getValue(AstValue.java:169) at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:184) at org.jb oss.weld.el.WeldValueExpression.getValue(WeldValueExpression.java:50) at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109) at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper. java:194) at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182) at javax.faces.component.UIOutput.getValue(UIOutput.java:174) at com.sun.faces.renderkit.html_basic.HtmlBasicInputRenderer .getValue(HtmlBasicInputRenderer.java:205) at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355) at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getCurrentValue(HtmlBasicRenderer.java:355) at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer. ) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:920) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863) at org.primefaces.component.column.Column.renderChildren(Column. java:352) at org.primefaces.component.datatable.DataTableRenderer.encodeCell(DataTableRenderer.java:1051) at o rg.primefaces.component.datatable.DataTableRenderer.encodeRow(DataTableRenderer.java:999) at org.primefaces.component.datatable.DataTableRenderer.encodeRows(DataTableRenderer.java:907) at org.primefaces.component.datatable.DataTableRenderer.encodeT DataTableRenderer.java:854) at org.primefaces.component.datatable.DataTableRenderer.encodeTbody(DataTableRenderer.java:814) at org.primefaces.component.datatable.DataTableRenderer.encodeRegularTable(DataTableRenderer.java:290) at org.primefaces.component .datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:252) at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:87) at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:920) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863) at javax.faces.render.Renderer.encodeChildren(Renderer.java:176) at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:890) at javax.faces.component.UIComponent .encodeAll(UIComponent.java:1856) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859) at com.sun.faces. application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:458) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:134) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWandler: 337) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120) at com.sun.faces.lifecycle.Phase.doPhase (Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:659) at org.apache.catalina. core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFi lterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache .catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) at org.apache.catalina.core.StandardContextValve. :96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) at org.apache.catalina.valves. ErrorReportValve.invoke(ErrorReportValve.java:80) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at .apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) at org.apache.coyote.http11.Http 11Processor.service(Http11Processor.java:799) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) at org. .tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker (Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread. run(Unknown Source)
This is my page that I'm having trouble bringing the student's name from the bank, because the teacher's name is coming normal.
GestaoProjetos.xhtml
<!DOCTYPE html>
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:f="http://xmlns.jcp.org/jsf/core"
xmlns:p="http://primefaces.org/ui"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
template="/WEB-INF/template/Layout.xhtml">
<ui:define name="titulo">
<title>Gestão Projetos</title>
</ui:define>
<ui:define name="conteudo">
<f:metadata>
<f:viewAction action="#{gestaoProjetosBean.todosProjetos}" />
</f:metadata>
<p:dataTable id="projetosDataTable" value="#{gestaoProjetosBean.listaProjetos}"
var="projeto" emptyMessage="Nenhuma informação a ser exibida"
paginator="true" rows="10" paginatorPosition="bottom"
selectionMode="single" selection="#{gestaoProjetosBean.projeto}" rowKey="#{projeto.id}">
<p:ajax event="rowSelect" update="frm:toolbar" />
<p:ajax event="rowUnselect" update="frm:toolbar" />
<p:column headerText="Título" sortBy="#{projeto.titulo}">
<h:outputText value="#{projeto.titulo}" />
</p:column>
<!--AQUI O PROFESSOR VEM NORMAL -->
<p:column headerText="Professor responsável">
<h:outputText value="#{projeto.professor.usuario.nome}" />
</p:column>
<!-- AQUI É O PROBLEMA QUE NÃO VEM O NOME ALUNO -->
<p:column headerText="Aluno" >
<h:outputText value="#{projeto.aluno.usuario.nome}" />
</p:column>
</p:dataTable>
</ui:composition>
ManagementProjectsBean.java(My bean)
@Named
@ViewScoped
public class GestaoProjetosBean implements Serializable {
private static final long serialVersionUID = 1L;
@Inject
private Projetos projetos;
@Inject
private FacesMessages messages;
@Inject
private CadastroProjetoService cadastroProjetoService;
private List<Projeto> listaProjetos;
private String termoPesquisa;
private Projeto projeto;
public void prepararNovoProjeto() {
projeto = new Projeto();
this.projeto.setUsuario(new Usuario());
//this.projeto.setAluno(new Aluno());
this.projeto.setProfessor(new Professor());
}
public void prepararEdicao() {
}
public void salvar() {
cadastroProjetoService.salvar(projeto);
atualizarRegistros();
messages.info("Projeto salvo com sucesso!");
RequestContext.getCurrentInstance().update(Arrays.asList(
"frm:monografiasDataTable", "frm:messages"));
}
public void excluir() {
cadastroProjetoService.excluir(projeto);
projeto = null;
atualizarRegistros();
messages.info("Projeto excluída com sucesso!");
}
public void pesquisar() {
listaProjetos = projetos.pesquisar(termoPesquisa);
if (listaProjetos.isEmpty()) {
messages.info("Sua consulta não retornou registros.");
}
}
public void todosProjetos() {
listaProjetos = projetos.todas();
}
private void atualizarRegistros() {
if (jaHouvePesquisa()) {
pesquisar();
} else {
todosProjetos();
}
}
private boolean jaHouvePesquisa() {
return termoPesquisa != null && !"".equals(termoPesquisa);
}
public List<Projeto> getListaProjetos() {
return listaProjetos;
}
public String getTermoPesquisa() {
return termoPesquisa;
}
public void setTermoPesquisa(String termoPesquisa) {
this.termoPesquisa = termoPesquisa;
}
public Projeto getProjeto() {
return projeto;
}
public void setProjeto(Projeto projeto) {
this.projeto = projeto;
}
public boolean isProjetoSeleciona() {
return projeto != null && projeto.getId() != null;
}
}
Aluno.java
@Entity
@Table(name="aluno")
public class Aluno implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "usuario_id", nullable = false)
private Usuario usuario;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Aluno other = (Aluno) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
@Override
public String toString() {
return "Aluno [id=" + id + "]";
}
}
Usuario.java
@Entity
@Table(name="usuario")
public class Usuario implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotEmpty
@Column(nullable = false, length = 40)
private String nome;
@NotEmpty
@Email
@Column(nullable = false, length = 40)
private String email;
@NotNull
@Column(nullable = false, length = 8)
private Long matricula;
@NotEmpty
@Column(nullable = false, length = 8)
private String senha;
@Column(name = "ultimo_acessso")
@Temporal(TemporalType.DATE)
private Date ultimoAcesso;
@Transient
private Professor professor;
@Transient
private List <Aluno> aluno;
public Usuario() {
super();
}
public Usuario(Long matricula, String senha) {
super();
this.matricula = matricula;
this.senha = senha;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public Date getUltimoAcesso() {
return ultimoAcesso;
}
public void setUltimoAcesso(Date ultimoAcesso) {
this.ultimoAcesso = ultimoAcesso;
}
public Long getMatricula() {
return matricula;
}
public void setMatricula(Long matricula) {
this.matricula = matricula;
}
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 Professor getProfessor() {
return professor;
}
public void setProfessor(Professor professor) {
this.professor = professor;
}
public List<Aluno> getAluno() {
return aluno;
}
public void setAluno(List<Aluno> aluno) {
this.aluno = aluno;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Usuario other = (Usuario) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
@Override
public String toString() {
return "Usuario [id=" + id + "]";
}
}
Projeto.java
@Entity
@Table(name = "projeto")
public class Projeto implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotEmpty
@Column(nullable = false, length = 120)
private String titulo;
@NotEmpty
@Column(nullable = false)
private String descricao;
@NotNull
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "professor_id", nullable = false)
private Professor professor;
@ManyToMany
@JoinTable(name="projeto_aluno", joinColumns=
{@JoinColumn(name="projeto_id")}, inverseJoinColumns=
{@JoinColumn(name="aluno_id")})
private List <Aluno> aluno;
@Transient
private Usuario usuario;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitulo() {
return titulo;
}
public void setTitulo(String titulo) {
this.titulo = titulo;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Professor getProfessor() {
return professor;
}
public void setProfessor(Professor professor) {
this.professor = professor;
}
public List<Aluno> getAluno() {
return aluno;
}
public void setAluno(List<Aluno> aluno) {
this.aluno = aluno;
}
public Usuario getUsuario() {
return usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Projeto other = (Projeto) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}
@Override
public String toString() {
return "Projeto [id=" + id + "]";
}
}
Answer:
I managed to solve my problem. Sorry for the ignorance of this silly beginner's question that the problem was very simple to solve, but I had already killed myself looking and nothing to solve, that's why I posted it here. I'll put it here to help any newbie like me that fall into this problem.
I decided to modify my <h:outputText>
as follows:
<p:column headerText="Aluno" >
<h:outputText value="#{projeto.alunos[0].usuario.nome}" />
</p:column>
I put [0]
on the alunos
property and it received the nome
of the aluno
that I was not able to get. I think the error was because he was receiving a list of alunos
, but I only wanted that specific aluno
that was related to the projeto
through id
.
Anyone who wants to know more about it, this post helped me: https://stackoverflow.com/questions/19629067/showing-hibernate-jpa-results-in-jsf-datatable-causes-java-lang-numberformatexc