[Resolvido ] Problemas junto aooo index e provavelmente ao Bean

6 respostas
L

O problema q o Navegador apresenta apos execução e esse :
/index.xhtml @10,101 value="#{alunoController.objAluno.nome}": Target Unreachable, 'objAluno' returned null

O Estranho e q junto ao (index ) me parece tudo certo ;
[color=red] Index [/color]

<h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
            <h:form>
            Nome do Aluno : <h:inputText id="txtname"    value="#{alunoController.objAluno.nome}" />
            <br/> 
            Disciplina : <h:inputText id="txtdisciplina" value="#{alunoController.objAluno.disciplina}" />
            <br/> 
            N1 : <h:inputText id="txtn1"   value="#{alunoController.objAluno.n1}" />
            <br/> 
            N2 : <h:inputText id="txtn2" value="#{alunoController.objAluno.n2}"/>

            <h:commandButton id="btn" value="Calcular" action="#{alunoController.acaoBotao}" />
       </h:form>
        
    </h:body>
</html>

[color=green]bean (Controller [/color]

package br.com.delta.Controller;

import br.com.delta.modelo.Aluno;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;


@ManagedBean
@RequestScoped
public class AlunoController {

    private Aluno objAluno ;

    public AlunoController(Aluno objAluno) {
        this.objAluno = new Aluno ();
    }

    public AlunoController() {
    }

    public Aluno getObjAluno() {
        return objAluno;
    }

    public void setObjAluno(Aluno objAluno) {
        this.objAluno = objAluno;
    }
    

   
    
    public String AcaoBotao (){ 
        return "resposta" ;
    } 
    
}

Quem pode ajudar agradeço muito ,ainda sou novato em java , e ja to quebrando a cabeça com esse erro bobo !!!

6 Respostas

Ruttmann

Posta a sua classe Aluno também por favor…

Também estou aprendendo isso, e acho que você não pode acessar deste modo o atributo. Porque você não acessa direto na classe Aluno o atributo que você precisa?

Até onde eu sei, os managed beans são justamente classes modelo, e não controller…

Se você for acessar pela classe modelo, é só colocar na EL #{aluno.nome}

Marcelo_de_Araujo

Acredito que o construtor com parâmetros não é necessário…
Inicialize seu objeto Aluno dentro do construtor sem parâmetros.

Hebert_Coelho

O código abaixo:

public Aluno getObjAluno() { return objAluno; }

Troque por:

public Aluno getObjAluno() { if(objAluno == null){ objAluno = new Aluno(); } return objAluno; }

lele_vader

Acho que ele chama o construtor sem parâmetros.
Você pode colocar o atributo private já o instanciando, ou colocar no construtor default (sem argumentos) ou ainda fazer o que o jake falou.

L

Obrigado a tdos ajudaram muito realmente o defeito tava no construtor tive q criar um construtor vazio , um cheioo , e altear o get
recebendo o valor null primeiro , não entendi o motivo mas deu certo né

public Aluno getObjAluno() {    
    if(objAluno == null){  
       objAluno = new Aluno();   
    }  
    return objAluno;    
}
Hebert_Coelho

Para entender o erro, comece analisando o que ele diz: Target Unreachable, ‘objAluno’ returned null

Ele tentou acessar o objAluno e null veio.

É necessário que ele esteja apontando para um atributo e não para null.

Por isso é necessário fazer o IF. Se você retornar apenas new Aluno() você terá um novo objeto a cada momento em que o aluno for acessado, por isso seu resultado seria inconsistente.

Criado 5 de setembro de 2012
Ultima resposta 6 de set. de 2012
Respostas 6
Participantes 5