java – Show data in a DataTable + JSF + Primefaces + CDI + ManagedBean

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

Scroll to Top