Olá galera,
Estou com o seguinte problema tenho um componente SelectManyCheckBox que é preenchido com uma lista através do f:selectItems. Sendo que tenho uma tela para cadastro que utiliza estes componentes e o mesmo funciona corretamente, porém quando vou realizar a edição nesta mesma tela os dados dos checks não são retornados . Estou utilizando os seguintes artefatos:
tipoCredencial.xhtml
[code] …
<f:metadata>
<f:viewParam name=“id” value="#{tipoCredencialCadastroMB.tipoCredencial.codigo}" />
<f:event type=“preRenderView” listener="#{tipoCredencialCadastroMB.render}"/>
</f:metadata>
<h:panelGrid columns=“3”>
<h:column>
<h:selectManyCheckbox value="#{tipoCredencialCadastroMB.selectedFormaAcesso}" converter=“formaAcessoConverter” >
<f:selectItems value="#{tipoCredencialCadastroMB.listaFormaAcesso}" var=“lista” itemLabel="#{lista.nome}" itemValue="#{lista}"/>
</h:selectManyCheckbox>
</h:column>
</h:panelGrid>
…
[/code]
Meu Bean
@ManagedBean
@ViewScoped
public class TipoCredencialCadastroMB extends MIFacesMB {
@EJB
TipoCredencialV2Bean tipoCredencialBean;
@EJB
FormaAcessoV2Bean formaAcessoBean;
private TipoCredencial tipoCredencial;
private List<FormaAcesso> listaFormaAcesso;
private List<FormaAcesso> selectedFormaAcesso;
@PostConstruct
public void init(){
this.tipoCredencial = new TipoCredencial();
selectedFormaAcesso= new ArrayList<FormaAcesso>();
initList();
}
@PostConstruct
public void render() throws MIAmbienteException {
if (tipoCredencial.getCodigo() != null) {
if (!FacesContext.getCurrentInstance().isPostback()) {
tipoCredencial = tipoCredencialBean.obter(this.tipoCredencial.getCodigo());
tipoCredencial.setListFormaAcesso(tipoCredencialBean.carregarFormaAcesso(this.tipoCredencial.getCodigo()).getListFormaAcesso());
this.selectedFormaAcesso = tipoCredencial.getListFormaAcesso();
}
}
}
public void initList(){
this.listaFormaAcesso = this.formaAcessoBean.pesquisar("nome");
}
public TipoCredencialV2Bean getTipoCredencialBean() {
return tipoCredencialBean;
}
public void setTipoCredencialBean(TipoCredencialV2Bean tipoCredencialBean) {
this.tipoCredencialBean = tipoCredencialBean;
}
public TipoCredencial getTipoCredencial() {
return tipoCredencial;
}
public void setTipoCredencial(TipoCredencial tipoCredencial) {
this.tipoCredencial = tipoCredencial;
}
public FormaAcessoV2Bean getFormaAcessoBean() {
return formaAcessoBean;
}
public void setFormaAcessoBean(FormaAcessoV2Bean formaAcessoBean) {
this.formaAcessoBean = formaAcessoBean;
}
public List<FormaAcesso> getListaFormaAcesso() {
return listaFormaAcesso;
}
public void setListaFormaAcesso(List<FormaAcesso> listaFormaAcesso) {
this.listaFormaAcesso = listaFormaAcesso;
}
public List<FormaAcesso> getSelectedFormaAcesso() {
return selectedFormaAcesso;
}
public void setSelectedFormaAcesso(
List<FormaAcesso> selectedFormaAcesso) {
this.selectedFormaAcesso = selectedFormaAcesso;
}
Entity
@Entity
@Table(name="sis_tipo_credencial", schema = "dbo")
public class TipoCredencial implements Serializable , BaseDomain<Integer> {
private static final long serialVersionUID = 1L;
private Integer codigo;
private String nome;
private String descricao;
private Integer toleranciaMinimaEpi;
private String motivoAlteracao;
private String motivoExclusao;
private Boolean excluido;
private List<FormaAcesso> listFormaAcesso;
private List<Epi> listEpi;
public String toString() {
return this.nome;
}
@Id
@SequenceGenerator(name="SIS_TIPO_CREDENCIAL_TCRCODIGO_GENERATOR", sequenceName="dbo.SEQ_SIS_TIPO_CREDENCIAL", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SIS_TIPO_CREDENCIAL_TCRCODIGO_GENERATOR")
@Column(name="tcr_codigo")
public Integer getCodigo() {
return codigo;
}
public void setCodigo(Integer codigo) {
this.codigo = codigo;
}
@Column(name="tcr_tolerancia_minima_epi")
public Integer getToleranciaMinimaEpi() {
return toleranciaMinimaEpi;
}
public void setToleranciaMinimaEpi(Integer toleranciaMinimaEpi) {
this.toleranciaMinimaEpi = toleranciaMinimaEpi;
}
@Column(name="tcr_titulo")
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Column(name="tcr_descricao")
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name="sis_forma_acesso_tipo_credencial",schema="dbo",joinColumns={@JoinColumn(name="tcr_codigo")},inverseJoinColumns={@JoinColumn(name="foa_Codigo")})
public List<FormaAcesso> getListFormaAcesso(){
return listFormaAcesso;
}
public void setListFormaAcesso(List<FormaAcesso> listFormaAcesso) {
this.listFormaAcesso = listFormaAcesso;
}
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name="sis_epi_tipo_credencial",schema="dbo",joinColumns={@JoinColumn(name="tcr_codigo")},inverseJoinColumns={@JoinColumn(name="epi_Codigo")})
public List<Epi> getListEpi() {
return listEpi;
}
public void setListEpi(List<Epi> listEpi) {
this.listEpi = listEpi;
}
@Transient
public String getEscala(){
String retorno = "Não";
if(!this.listFormaAcesso.isEmpty()){
for(FormaAcesso tipo : listFormaAcesso) {
if(tipo.getCodigo().equals(1)) {
retorno = "Sim";
break;
}
}
}
return retorno;
}
@Transient
public String getLivreAcesso(){
String retorno = "Não";
if(!this.listFormaAcesso.isEmpty()){
for(FormaAcesso tipo : listFormaAcesso) {
if(tipo.getCodigo().equals(2)) {
retorno = "Sim";
break;
}
}
}
return retorno;
}
@Transient
public String getViagem(){
String retorno = "Não";
if(!this.listFormaAcesso.isEmpty()){
for(FormaAcesso tipo : listFormaAcesso) {
if(tipo.getCodigo().equals(3)) {
retorno = "Sim";
break;
}
}
}
return retorno;
}
@Column(name="tcr_motivo")
public String getMotivoAlteracao() {
return motivoAlteracao;
}
public void setMotivoAlteracao(String motivoAlteracao) {
this.motivoAlteracao = motivoAlteracao;
}
@Column(name="tcr_motivo_exclusao")
public String getMotivoExclusao() {
return motivoExclusao;
}
public void setMotivoExclusao(String motivoExclusao) {
this.motivoExclusao = motivoExclusao;
}
@Column(name="tcr_excluido")
public Boolean getExcluido() {
return excluido;
}
public void setExcluido(Boolean excluido) {
this.excluido = excluido;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
TipoCredencial other = (TipoCredencial) obj;
if (codigo == null) {
if (other.codigo != null)
return false;
} else if (!codigo.equals(other.codigo))
return false;
return true;
}
}
Converter
@FacesConverter(value="formaAcessoConverter")
public class FormaAcessoConverter implements Converter {
int counter;
@Override
public Object getAsObject(FacesContext context, UIComponent component,String value) {
for (UIComponent child : component.getChildren()) {
if (child instanceof UISelectItems) {
@SuppressWarnings("unchecked")
List<FormaAcesso> items = (List<FormaAcesso>) ((UISelectItems) child).getValue();
return items.get(Integer.parseInt(value)-1);
}
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component,Object value) {
return Integer.toString(++counter);
}
}
Busquei alguns exemplos aqui no fórum e no google porém sem sucesso. Desde já agradeço a colaboração de todos e caso possam me indicar um material ou um exemplo de utilização destes componentes nesta situação, será de grande ajuda
Abraços