tenho um dataTable carregado com diversos valores sendo que cada um deles possui um selectOneRadio para que seja selecionado…
seleciono 1 e salvo, mas após o submit, ao selecionar outro valor e mandar salvar ocorre um erro de validação nativo do componete: value is not valid…
Já implementei o equals e hashcode no objeto correspondente mas persiste o erro… Alguém pode dar uma outra solução?
dataTable que contém o selectOneRadio
<rich:dataTable
onRowMouseOver="this.style.backgroundColor='#C5DCC5'"
onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
width="97%" border="0" cellpadding="0" id="tablePromocoes"
value="#{eventoPromocaoControle.listaPromocao}" var="promocao"
rowClasses="cursorPointer">
<f:facet name="header">
<rich:columnGroup>
<rich:column colspan="1">
</rich:column>
<rich:column colspan="1">
<h:outputText value="Tipo da Promoção" />
</rich:column>
<rich:column colspan="1">
<h:outputText value="Posto/Grad" />
</rich:column>
<rich:column colspan="1">
<h:outputText value="Data da Promoção" />
</rich:column>
<rich:column colspan="1">
<h:outputText value="Documento de Promoção" />
</rich:column>
</rich:columnGroup>
</f:facet>
<rich:column>
<h:selectOneRadio id="radioPromocao" value="#{promocao}" onclick="return dataTableSelectOneRadio(this);">
<f:selectItem itemValue="#{promocao.selecionado}"/>
<a4j:support event="onchange" action="#{eventoPromocaoControle.selecionaPromocao(promocao)}" />
</h:selectOneRadio>
</rich:column>
<rich:column>
<h:outputText value="#{promocao.tipoPromocao.descricao}" />
</rich:column>
<rich:column>
<h:outputText
value="#{promocao.promocaoId.postoGradEspec.descricao}" />
</rich:column>
<rich:column>
<h:outputText value="#{promocao.dtPromocao}" />
</rich:column>
<rich:column>
<h:outputText value="#{promocao.docPromocao}" />
</rich:column>
</rich:dataTable>
Objeto Promocao.java
package br.mil.eb.dgp.sirf3.negocio.entidade.promocao;
import java.util.Date;
import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import org.hibernate.annotations.Type;
import org.hibernate.proxy.HibernateProxy;
import org.hibernate.validator.NotNull;
import org.jboss.seam.annotations.Name;
import br.mil.eb.dgp.sirf3.negocio.entidade.militar.Militar;
import br.mil.eb.dgp.sirf3.negocio.entidade.militar.PostoGradEspec;
import br.mil.eb.dgp.sirf3.negocio.entidade.organizacaoexercito.Orgao;
import br.mil.eb.dgp.sirf3.negocio.enums.TipoPromocao;
@Entity
@Table(name = "PROMOCAO", schema = "RH_QUADRO")
@Name(value="promocao")
public class Promocao {
@EmbeddedId
@AttributeOverrides( {
@AttributeOverride(name = "militar", column = @Column(name = "MIL_PES_IDENTIFICADOR_COD", nullable = false)),
@AttributeOverride(name = "postoGradEspec", column = @Column(name = "POSTO_GRAD_CODIGO", nullable = false)),
@AttributeOverride(name = "dtPromocao", column = @Column(name = "DT_PROMOCAO", nullable = false)) })
@NotNull
private PromocaoId promocaoId;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "MIL_PES_IDENTIFICADOR_COD",insertable=false, updatable=false)
private Militar militar;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "POSTO_GRAD_CODIGO",insertable=false, updatable=false)
private PostoGradEspec postoGradEspec;
@Temporal(TemporalType.DATE)
@Column(name = "DT_PROMOCAO", length = 7,insertable=false, updatable=false)
private Date dtPromocao;
@Column(name="TIPO_PROMOCAO")
@Type(type="br.mil.eb.dgp.sirf3.negocio.enums.TipoPromocao")
private TipoPromocao tipoPromocao;
@Column(name = "DOC_PROMOCAO")
private String docPromocao;
@Column(name = "PUBL_ADT")
private String publAdt;
@Temporal(TemporalType.DATE)
@Column(name = "DT_DOC_PROMOCAO", length = 7)
private Date dtDocPromocao;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "ORGAO_CODIGO")
private Orgao orgao;
@Column(name = "TITULO_IDT_CODIGO")
private Integer tituloIdtCodigo;
@Column(name = "DOC_TIPO_IDT")
private String docTipoIdt;
@Column(name = "INDEVIDA")
private String indevida;
@Temporal(TemporalType.DATE)
@Column(name = "DT_DOC_PROMOCAO_IDT", length = 7)
private Date dtDocPromocaoIdt;
@Transient
private EventoPromocao eventoPromocao;
@Transient
private boolean selecionado;
public PromocaoId getPromocaoId() {
return promocaoId;
}
public void setPromocaoId(PromocaoId promocaoId) {
this.promocaoId = promocaoId;
}
public TipoPromocao getTipoPromocao() {
return tipoPromocao;
}
public void setTipoPromocao(TipoPromocao tipoPromocao) {
this.tipoPromocao = tipoPromocao;
}
public String getDocPromocao() {
return docPromocao;
}
public void setDocPromocao(String docPromocao) {
this.docPromocao = docPromocao;
}
public String getPublAdt() {
return publAdt;
}
public void setPublAdt(String publAdt) {
this.publAdt = publAdt;
}
public Date getDtDocPromocao() {
return dtDocPromocao;
}
public void setDtDocPromocao(Date dtDocPromocao) {
this.dtDocPromocao = dtDocPromocao;
}
public Orgao getOrgao() {
return orgao;
}
public void setOrgao(Orgao orgao) {
this.orgao = orgao;
}
public Integer getTituloIdtCodigo() {
return tituloIdtCodigo;
}
public void setTituloIdtCodigo(Integer tituloIdtCodigo) {
this.tituloIdtCodigo = tituloIdtCodigo;
}
public String getDocTipoIdt() {
return docTipoIdt;
}
public void setDocTipoIdt(String docTipoIdt) {
this.docTipoIdt = docTipoIdt;
}
public String getIndevida() {
return indevida;
}
public void setIndevida(String indevida) {
this.indevida = indevida;
}
public Date getDtDocPromocaoIdt() {
return dtDocPromocaoIdt;
}
public void setDtDocPromocaoIdt(Date dtDocPromocaoIdt) {
this.dtDocPromocaoIdt = dtDocPromocaoIdt;
}
public EventoPromocao getEventoPromocao() {
return eventoPromocao;
}
public void setEventoPromocao(EventoPromocao eventoPromocao) {
this.eventoPromocao = eventoPromocao;
}
public Militar getMilitar() {
return militar;
}
public void setMilitar(Militar militar) {
this.militar = militar;
}
public PostoGradEspec getPostoGradEspec() {
return postoGradEspec;
}
public void setPostoGradEspec(PostoGradEspec postoGradEspec) {
this.postoGradEspec = postoGradEspec;
}
public Date getDtPromocao() {
return dtPromocao;
}
public void setDtPromocao(Date dtPromocao) {
this.dtPromocao = dtPromocao;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((promocaoId == null) ? 0 : promocaoId.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if(obj.getClass().getName().toLowerCase().contains("javassist")){
obj = (Object) ((HibernateProxy) obj)
.getHibernateLazyInitializer().getImplementation();
}
if (getClass() != obj.getClass())
return false;
Promocao other = (Promocao) obj;
if (promocaoId == null) {
if (other.promocaoId != null)
return false;
} else if (!promocaoId.equals(other.promocaoId))
return false;
return true;
}
public boolean isSelecionado() {
return selecionado;
}
public void setSelecionado(boolean selecionado) {
this.selecionado = selecionado;
}
}