Identifier resolved to null

9 respostas
rafa120

Alguém pode me ajudar a identificar o problema com esse meu código? Já tentei mas não consigo achar o erro.
recebo este erro quando tento adicionar um numero no campo idUser referente a ID da tabela usuario (chave estrangeira)

obs: autentico na pagina com usuario e senha, nao sei se faz a diferença

Advertência: /pages/changes.xhtml @285,133 value="#{changesBean.usuario.idUser}": Target Unreachable, 'null' returned null javax.el.PropertyNotFoundException: /pages/changes.xhtml @285,133 value="#{changesBean.usuario.idUser}": Target Unreachable, 'null' returned null

Ja tentei utilizando #{change.usuario.idUser} tambem…

campo na mesma pagina para add o numero da change
<p:inputText value="#{changesBean.change.changeNumber}" required="true" style="width: 200px" maxlength="30"/>

O mais engraçado é que para fazer uma consulta puxando os dados de outra tabela, eu tenho os resultados mostrados na tela.

Um trecho do XHTML
` <p:column headerText=“Customer” filterBy="#{change.customer}" sortBy="#{change.customer}">
<h:outputText value="#{change.customer}" />
</p:column>

<p:column headerText="Team" filterBy="#{change.usuario.team}" sortBy="#{change.usuario.team}">
     <h:outputText value="#{change.usuario.team}" />
</p:column>`
Changes

`

@Entity

@Table(name=changes)

public class Changes  implements java.io.Serializable {
@Id
 @GeneratedValue(strategy=GenerationType.AUTO)
 @Column(name="id",nullable=false)
 private Integer id;
 
 @Column(name="change_number",nullable=false, length=30)
 private String changeNumber;

 //Tem mtos campos..removi aqui do topico para nao ficar grande

 @ManyToOne
 @JoinColumn(name="id_user", referencedColumnName="id_user")
 private Usuario usuario;

`

Usuario

`@Entity

@Table(name=usuario)

public class Usuario implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id_user",nullable=false)
private Integer idUser;

@OneToMany(mappedBy="usuario",fetch=FetchType.EAGER,cascade = CascadeType.ALL)
private List<Changes> listaChanges;`

9 Respostas

Krismorte

porque você esta setando o changesBean.usuario.idUser? Você marcou ele pra ser gerado automaticamente

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id_user",nullable=false)
private Integer idUser;

Edita sua pergunta e adicioanr sua JSF completa e sua classe BEAN

rafa120

É auto increment esse ID

changesbean

`@ManagedBean(name=changesBean)

@SessionScoped

public class ChangesBean {
private Changes change;
private List<Changes> changes;
//private List<Usuario> usuario;
private Integer idUser;
private Usuario usuario;

public ChangesBean() {
    change = new Changes();
}

public void prepararInserir(){
    change = new Changes();
}

public void prepararAtualizar(Integer id){
    ChangesDao changesDao = new ChangesDaoImpl();
    change = changesDao.buscarPorId(id);
}

public void inserir(){
    try {
        ChangesDao changesDao = new ChangesDaoImpl();
        changesDao.inserir(change);
        FacesContext context = FacesContext.getCurrentInstance();            
        context.addMessage(null, new FacesMessage("Change successfully added."));
        change = new Changes();
    } catch (Exception e) {
        System.out.println("Erro ao inserir: "+e.getMessage());
    }
}

public void atualizar(){
    ChangesDao changesDao = new ChangesDaoImpl();
    changesDao.atualizar(change);
    FacesContext context = FacesContext.getCurrentInstance();         
    context.addMessage(null, new FacesMessage("Change successfully updated."));
    change = new Changes();
}

public void excluir(){
    ChangesDao changesDao = new ChangesDaoImpl();
    changesDao.excluir(change);
    FacesContext context = FacesContext.getCurrentInstance();         
    context.addMessage(null, new FacesMessage("Change successfully deleted."));
    change = new Changes();
}

public Changes getChange() {
    return change;
}

public void setChange(Changes change) {
    this.change = change;
}

public List<Changes> getChanges() {
    ChangesDao changesDao = new ChangesDaoImpl();
    changes = changesDao.buscarTodos();
    return changes;
}

public List<Changes> getChangesAprovadas() {
    ChangesDao changesDao = new ChangesDaoImpl();
    changes = changesDao.buscarTodosAprovados();
    return changes;
}

public List<Changes> getChangesCritical() {
    ChangesDao changesDao = new ChangesDaoImpl();
    changes = changesDao.buscarTodosCritical();
    return changes;
}

public List<Changes> getChangesFLM() {
    ChangesDao changesDao = new ChangesDaoImpl();
    changes = changesDao.buscarPorFLM();
    return changes;
}


private List<Changes> filteredChanges;

public List<Changes> getFilteredChanges() {  
    return filteredChanges;  
}  

public void setFilteredChanges(List<Changes> filteredChanges) {  
    this.filteredChanges = filteredChanges;  
}  


public Usuario getUsuario() {
    return usuario;
}

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


public Integer getIdUser() {
    return idUser;
}

public void setIdUser(Integer idUser) {
    this.idUser = idUser;
}

}`

Krismorte

Você não pode atribuir um valor a um @ID @GeneratedValue(strategy=GenerationType.AUTO)

Você vai passar o objeto inteiro

rafa120

Mas e quando eu for cadastrar um usuario? preciso que seja auto increment a ID

Essa id_user já existe na tabela usuario…eh a id de algum user que eu cadastrei.
Quando chamo meu formulario de Changes eu cadastro os dados da tabela de Change + id_user que já existe que vem da tabela de usuario.

Nao seria isso?

Krismorte

Não. A relação entre entidades (JPA) é feita entra objetos e não entre atributos.

Exemplo
changes. setUsuario(meuUsuario)

Como você esta trabalhando com JSF tudo que vem do HTML é texto então você tera que criar um Converter

Em uma das suas perguntas de ontem pus um exemplo.

rafa120

vi tanto exemplo na net parecido com o meu… achei que seria igual usando hibernate, jsf e primefaces.
Nunca vi esse converter… o buraco é mais fundo do que eu pensava entao… putz

A forma mais rapida/eficiente de arrumar isso seria criando esta converter?

rafa120

Ele pede para criar as classes GrauDificuldade e GrauDificuldadeBusiness

Tem que colocar alguma coisa em especial? Desculpe a burrice

Krismorte

Essas classes ai são so de exemplo. Tu vai fazer mais ou menos o que esta delas mudando so os objetos.

rafa120

Blz, vou tentar.

Valeu

Criado 17 de fevereiro de 2016
Ultima resposta 18 de fev. de 2016
Respostas 9
Participantes 2