@oitathi escreveu:
Estou tentando criar componentes 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 é 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; }
}
Mensagens: 1
Participantes: 1