Target Unreachable, identifier 'users' resolved to null

0

My bean:

package com.cliente.Bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import org.omnifaces.util.Messages;

import com.sistema.dao.PessoaDAO;
import com.sistema.dao.UsuarioDAO;

import com.sistema.domain.Pessoa;
import com.sistema.domain.Usuario;

@SuppressWarnings("serial")
@ManagedBean
@ViewScoped
public class UsuarioBean implements Serializable {

    private Usuario usuario;
    private List<Usuario> usuarios;
    private List<Pessoa> pessoas;

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public List<Usuario> getUsuarios() {
        return usuarios;
    }

    public void setUsuarios(List<Usuario> usuarios) {
        this.usuarios = usuarios;
    }

    public List<Pessoa> getPessoas() {
        return pessoas;
    }

    public void setPessoas(List<Pessoa> pessoas) {
        this.pessoas = pessoas;
    }

    public void novo() {
        try {

            usuario = new Usuario();

            PessoaDAO pessoaDAO = new PessoaDAO();
            pessoas = pessoaDAO.listar("nomeUsuario");

            pessoas = new ArrayList<Pessoa>();

        } catch (RuntimeException erro) {
            Messages.addGlobalError("Ocorreu um erro ao tentar listar as baladas");
            erro.printStackTrace();
        }
    }

    public void salvar() {
        try {

            UsuarioDAO usuarioDAO = new UsuarioDAO();

            usuarioDAO.merge(usuario);

            novo();
            usuario = new Usuario();

            PessoaDAO pessoaDAO = new PessoaDAO();
            pessoas = pessoaDAO.listar();

            usuarios = usuarioDAO.listar();

            Messages.addGlobalInfo("Cliente Salvo Com sucesso");
        } catch (RuntimeException erro) {
            Messages.addFlashGlobalError("Ocorreu um erro ao tentar salvar o cliente");
            erro.printStackTrace();
        }
    }

}

My XHTML:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui"
    xmlns:ui="http://java.sun.com/jsf/facelets">



<h:head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Usuarios</title>

<h:outputStylesheet library="css" name="estilo.css" />
    <h:outputStylesheet library="js" name="scripts.js" />



</h:head>
<h:body>
<p:growl id="mensagem"/>
<h:form id="formListagem">


<p:panel header="Lista de Usuários">
<p:dataTable id="tabela" emptyMessage="Nehum registro encontrado" paginator="true">
<f:facet name="header">
<p:commandButton value="Novo" oncomplete="PF('dialogo').show();"
actionListener=":formCadastro:pnCadastro"/>
</f:facet>



<p:column headerText="Codigo" value="#{usuario.codigo}">
</p:column>

<p:column headerText="Ativo" value="#{usuario.ativo}">
</p:column>

<p:column headerText="Senha" value="#{usuario.senha}">
</p:column>


<p:column headerText="Tipo" value="#{usuario.tipo}">
</p:column>


<p:column headerText="Opções">



</p:column>
</p:dataTable>
</p:panel>
</h:form>

<p:dialog header="Usuários - Cadastro" widgetVar="dialogo"
draggable="false" resizable="false" modal="true" closable="false">
<h:form id="formCadastro">
<h:panelGrid columns="2" id="pnCadastro">


    <p:outputLabel for="pessoa" value="Pessoa:" />

                <p:selectOneMenu id="pessoa" filter="true"
                    value="#{usuarioBean.usuario.pessoa}" required="true"
                    requiredMessage="O campo 'Pessoa' é obrigatório"
                    converter="omnifaces.SelectItemsConverter">

                    <f:selectItem noSelectionOption="true"
                        itemLabel="Selecione uma pessoa" />

                    <f:selectItems value="#{pessoaBean.pessoas}" var="pessoa"
                        itemValue="#{pessoa}" itemLabel="#{pessoa.nomeUsuario} " />
                </p:selectOneMenu>



                <p:outputLabel for="senha" value="Senha:" />

                <p:password id="senha" maxlength="8" size="10"
                    value="#{usuarios.senha}" required="true"
                    requiredMessage="O campo 'Senha' é obrigatório"
                    validatorMessage="Informe uma senha de 6 a 8 caracteres">
                    <f:validateLength minimum="6" maximum="8" />
                </p:password>




                <p:outputLabel for="tipo" value="Tipo:" />
                <p:selectOneRadio id="tipo" value="#{usuarioBean.usuario.tipo}"
                    required="true" requiredMessage="O campo 'Tipo' ´obrigatório">
                    <f:selectItem itemValue="A" itemLabel="Administrador" />
                    <f:selectItem itemValue="G" itemLabel="Gerente" />
                    <f:selectItem itemValue="U" itemLabel="Usuario" />
                </p:selectOneRadio>

                <p:outputLabel for="ativo" value="Ativo:" />
                <p:selectBooleanCheckbox id="ativo"
                    value="#{usuarioBean.usuario.ativo}" required="true"
                    requiredMessage="O campo 'Ativo' é obrigatório" />

</h:panelGrid>



<h:panelGrid columns="2">
<p:commandButton value="Salvar" actionListener="#{usuarioBean.salvar()}" update=":mensagem :formCadastro:pnCadastro :formListagem:tabela"/>
<p:commandButton value="Fechar" oncomplete="PF('dialogo').hide();"/>

</h:panelGrid>
</h:form>
</p:dialog>
</h:body>
</html>

Tomcat error

jan 05, 2017 4:40:43 PM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
GRAVE: javax.el.PropertyNotFoundException: /pages/usuario.xhtml @85,63 value="#{usuarios.senha}": Target Unreachable, identifier 'usuarios' resolved to null
    at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
    at org.primefaces.util.ComponentUtils.getConverter(ComponentUtils.java:146)
    at org.primefaces.renderkit.InputRenderer.getConvertedValue(InputRenderer.java:175)
    at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1045)
    at javax.faces.component.UIInput.validate(UIInput.java:975)
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1248)
    at javax.faces.component.UIInput.processValidators(UIInput.java:712)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIForm.processValidators(UIForm.java:253)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at org.primefaces.component.dialog.Dialog.processValidators(Dialog.java:423)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1195)
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    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)
Caused by: javax.el.PropertyNotFoundException: Target Unreachable, identifier 'usuarios' resolved to null
    at org.apache.el.parser.AstValue.getTarget(AstValue.java:74)
    at org.apache.el.parser.AstValue.getType(AstValue.java:58)
    at org.apache.el.ValueExpressionImpl.getType(ValueExpressionImpl.java:168)
    at com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:98)
    ... 38 more

My user class:

package com.sistema.domain;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;

@SuppressWarnings("serial")
@Entity
public class Usuario extends GenericDomain {

    @Column(length = 32, nullable = false)
    private String senha;

    @Column(nullable = false)
    private Character tipo;

    @Column(nullable = false)
    private Boolean ativo;


    @ManyToOne
    @JoinColumn(nullable = false)
    private Pessoa pessoa;






    @ManyToOne
    public Pessoa getPessoa() {
        return pessoa;
    }

    @ManyToOne
    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

    public Character getTipo() {
        return tipo;
    }

    public void setTipo(Character tipo) {
        this.tipo = tipo;
    }

    public Boolean getAtivo() {
        return ativo;
    }

    public void setAtivo(Boolean ativo) {
        this.ativo = ativo;
    }


}

In XHTML, I have already tried to change #{usuarios.senha} by #{usuario.senha} and #{usuarioBean.usuario.senha} - All three forms generate the same error.

    
asked by anonymous 05.01.2017 / 19:42

1 answer

1

Your error is here:

                <p:password id="senha" maxlength="8" size="10"
                    value="#{usuarios.senha}" required="true"
                    requiredMessage="O campo 'Senha' é obrigatório"
                    validatorMessage="Informe uma senha de 6 a 8 caracteres">
                    <f:validateLength minimum="6" maximum="8" />
                </p:password>

Look at value="#{usuarios.senha}" - See that you used usuarios in the plural, not usuario in the singular.

Furthermore, nowhere are you setting the value of usuario , usuarios or usuarioBean.usuario - all of them are null at this point in the program. So, trying to use any of them will give this exception, which in practice is almost the same as a NullPointerException . A possible solution to this would be to put in your bean the following:

    private String senha;

    public String getSenha() {
        return senha == null ? "" : senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }

And then, in XHTML, you use value="#{usuarioBean.senha}" .

Then, within your salvar method, you put a usuario.setSenha(senha) . Do this with all the fields to be saved.

I also recommend that you read this my other answer . There, I explain why using entity beans outside controller (something you're doing when using them in XHTML and storing them in the managed bean ) is not a very good idea. Instead, store it in the managed bean and pass it to JSF, just DTOs and other simple data such as strings.

    
05.01.2017 / 19:57