Seguinte,tenho uma pagina de inclusao de condicao de pagamento, td funciona corretamente como as demais que eu tenho no sistema porem qdo eu tento salvar uma nova condicao ele somemte salva ou atualiza o codigo que no caso usa um gerador automatico,meu bean sempre esta nulo na hora de salvar o que pode ser?
No faces.xml o bean ta com escopo de sessao,e tds os atributos da minha classe CondicaoPagamento tem seus metodos get e set, naum estou conseguindo entender pq ele nao seta os valores no bean,alguem ja passou por isso ou pode dar uma dica?
obrigado.
Jsf comportamento estranho
5 Respostas
Posta pelo menos trechos do JSP e do managedBean, tipo um input, o commandLink, o método chamado, etc.
Então…
A definição de JSF já é de sempre ter comportamentos estranhos.
Enfim… posta o código e explica melhor o que está acontecendo pra gente ter uma idéia do que possa ser…
[]'s
Gui
blz vou postar os codigo,obrigado pela atenção.
trecho da minha pagina:
<h:column>
<rich:panelBar height="516" width="711">
<rich:panelBarItem label="#{msg.cadastrarcondicao}">
<h:panelGrid columns="2" width="574">
<h:outputText value="#{msg.codigo}"></h:outputText>
<h:inputText value="#{condicao.condicaopagamento.condicaoid}" styleClass="select" readonly="true"></h:inputText>
<h:outputText value="#{msg.descricao}"></h:outputText>
<h:inputText value="#{condicao.condicaopagamento.descricao}" styleClass="select" style=" width : 522px;"></h:inputText>
<h:outputText value="#{msg.situacao}"></h:outputText>
<h:selectOneMenu value="#{condicao.condicaopagamento.situacao}" styleClass="select" style=" width : 100px;">
<f:selectItem itemLabel="Ativo" itemValue="A"/>
<f:selectItem itemLabel="Inativo" itemValue="I"/>
</h:selectOneMenu>
</h:panelGrid>
<h:outputText value="#{msg.observacoes}"></h:outputText><br>
<h:inputTextarea value="#{condicao.condicaopagamento.observacoes}" styleClass="select" style="width : 578px; height : 77px;"></h:inputTextarea>
<rich:separator width="576"></rich:separator>
..........................
<h:commandButton action="#{condicao.create}" value="#{msg.salvar}" styleClass="botoes" immediate="true"></h:commandButton>
<a4j:region id="regiao2">
metodo create no bean
public String create() {
IDaoCondicaopagamento ldao = new DaoCondicaopagamento();
System.out.println("Condicao de pagamento..............:"+condicaopagamento.getDescricao());
ldao.salvar(condicaopagamento);
getTodos();
return "sucesso_incProduto";
}
no dao
public void salvar(Condicaopagamento objeto) {
session = HibernateUtil.getInstance();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.saveOrUpdate(objeto);
tx.commit();
} catch (HibernateException e) {
tx.rollback();
} finally {
session.close();
}
}
e no faces ta assim:
<managed-bean>
<managed-bean-name>condicao</managed-bean-name>
<managed-bean-class>com.Lgweb.Tcc.Controller.ControlCondicaopagamento</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
e a classe de entidade:
/*
* Condicaopagamento.java
*
* Created on 22 de Abril de 2008, 13:15
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package com.Lgweb.Tcc.Model;
import java.io.Serializable;
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name = "condicaopagamento")
@SequenceGenerator(name = "geracodcondicao", sequenceName = "geracodcondicao")
public class Condicaopagamento implements Serializable {
@Id @GeneratedValue(strategy = GenerationType.AUTO, generator = "geracodcondicao")
@Column(name = "condicaoid", nullable = false)
private Integer condicaoid;
@Column(name = "descricao")
private String descricao;
@Column(name = "situacao")
private String situacao;
@Column(name = "observacoes")
private String observacoes;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "condicaopagamento")
private Collection<DiascondicaoDias> diascondicaoDiasCollection;
public Condicaopagamento() {
}
public Integer getCondicaoid() {
return condicaoid;
}
public void setCondicaoid(Integer condicaoid) {
this.condicaoid = condicaoid;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public String getSituacao() {
return situacao;
}
public void setSituacao(String situacao) {
this.situacao = situacao;
}
public String getObservacoes() {
return observacoes;
}
public void setObservacoes(String observacoes) {
this.observacoes = observacoes;
}
public Collection<DiascondicaoDias> getDiascondicaoDiasCollection() {
return this.diascondicaoDiasCollection;
}
public void setDiascondicaoDiasCollection(Collection<DiascondicaoDias> diascondicaoDiasCollection) {
this.diascondicaoDiasCollection = diascondicaoDiasCollection;
}
@Override
public int hashCode() {
int hash = 0;
hash += (this.condicaoid != null ? this.condicaoid.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
if (!(object instanceof Condicaopagamento)) {
return false;
}
Condicaopagamento other = (Condicaopagamento)object;
if (this.condicaoid != other.condicaoid && (this.condicaoid == null || !this.condicaoid.equals(other.condicaoid))) return false;
return true;
}
@Override
public String toString() {
return ""+descricao;
}
}
Bom o codigo e isso ai,no meu bean eu controlo a condicao e os dias da condicao,sera que isso poderia interfirir em algo?
obrigado pessoal,abraços.
<h:commandButton action="#{condicao.create}" value="#{msg.salvar}" styleClass="botoes" immediate="true">
"Immediate=true" --> Isto faz com o que o bean não seja populado ao chamar o método. Tire isto ou coloque para false.
Realmente cintia era isso mesmo mto obrigado pela dica abraços.