Estou tentando criar componentes <p:selectManyCheckbox> apartir de uma lista de Objetos ‘AtributosDaPesquisa’.
‘AtributosDaPesquisa’ contem ‘Dominio’ que por sua vez contem uma lista de ‘ElementosDominio’.
‘ElementoDominio’ contem entre outros atributos, um boleano.
O componente <p:selectManyCheckbox> é uma lista de ‘ElementoDominio’. Gostaria de que quando um dos checkbox fosse clicado, o respectivo ‘ElementoDominio’ fosse passado como parametro pelo ajax para uma função no meu Bean.
Porém, se eu utilizo o converter, o ajax não chama função alguma.
Alguém poderia me ajudar?
Seguem minhas classes:
<h:panelGrid columns="2" cellpadding="20">
<h:outputText value="#{adp.dominio.nome}"/>
<p:selectManyCheckbox id="gridQueryResult" layout="grid" columns="2" value = "#atributosDaPesquisaBean.resultado}" converter="ElementoDominioConverter">
<p:ajax listener="#{atributosDaPesquisaBean.incluiNaPesquisa}"/>
<f:selectItems value="#{adp.dominio.elementosDominio}" var="elemento" itemLabel="#{elemento.label}" itemValue="#{elemento}"/>
</p:selectManyCheckbox>
</h:panelGrid>
Bean
@ManagedBean
@SessionScoped
public class AtributosDaPesquisaBean {
private List<AtributosDaPesquisa> atributosDaPesquisaList;
private String[] resultado;
@PostConstruct
public void init() {
AtributosDaPesquisaDAO adpDao = new AtributosDaPesquisaDAO();
atributosDaPesquisaList = adpDao.buscaPorRelatorio(relatorio.getCodigo());
atributosDaPesquisaList.forEach(adp -> adp.setaClausulaDeData());
for(AtributosDaPesquisa adp: atributosDaPesquisaList){
if(adp.isEhDominio()){
List<ElementoDominio> elementosDominio = adp.getDominio().getElementosDominio();
elementosDominio.forEach(elemento -> elemento.setEstaNaPesquisa(false));
}
}
}
public void incluiNaPesquisa(AjaxBehaviorEvent event){
//aqui meu método não é chamado
Map<String, Object> map = event.getComponent().getAttributes();
ElementoDominio elemento = (ElementoDominio) map.get("value");
System.out.println("ok");
}
o model AtributosDaPesquisa
@Entity
@Table(name = "tbl_atributosdapesquisa")
public class AtributosDaPesquisa {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "atr_codigo")
private Long codigo;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "tbl_dominio_dom_codigo", referencedColumnName = "dom_codigo")
private Dominio dominio;
//outras colunas
//getters and setters
}
o model dominio
@Entity
@Table(name = "tbl_dominio")
public class Dominio {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "dom_codigo")
private Long codigo;
@Column(name="dom_nome", nullable = false)
private String nome;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "dominio")
private List<ElementoDominio> elementosDominio;
//getters and setters
}
o modelo ElementoDominio:
@Entity
@Table(name = "tbl_elemento_dominio")
public class ElementoDominio {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ele_dom_codigo")
private Long codigo;
@Column(name="ele_dom_label", nullable = false)
private String label;
@Column(name="ele_dom_esta_na_pesquisa", nullable = false)
private boolean estaNaPesquisa;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "dom_codigo", nullable = false)
private Dominio dominio;
//getters and setters
}
e o converter:
@FacesConverter(value = “ElementoDominioConverter”, forClass=ElementoDominio.class)
public class ElementoDominioConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value != null && StringUtils.isNotBlank(value)&& !value.startsWith("-")) {
try {
ElementoDominio elemento = new ElementoDominioDAO().buscar(Long.parseLong(value));
return elemento;
}catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component,Object object) {
if (object != null && StringUtils.isNotBlank(object.toString())) {
String codigo = ((ElementoDominio)object).getCodigo().toString();
return codigo;
}
return null;
}
}