Prezados colegas
Tenho uma aplicação JSF que utiliza um mapa em js filtrando seus respectivos estados ao selecionar sua região.
O js mapa está funcionando e trazendo os estados selecionados, porém não sei como usá-lo no jsf para filtar e trazer no datatable os dados do respectivo estado.
Se alguém poder me dar uma orientação de como proceder. Ficarei grato.
Minha entidade
@Entity
@Table(name = "presenca_copy")
public class Presenca implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String instituicao;
private String assistidos;
private String desassistidos;
private String periodo;
private int tipo;
gets/sets
}
dao
@SuppressWarnings("unchecked")
public List<Object[]> BuscarUF(String siglaEstado) {
EntityManager em = new JPAUtil().getEntityManager();
Query query = em.createNativeQuery("SELECT * FROM presenca where UF ='" + siglaEstado+ "'");
List<Object[]> estados = query.getResultList();
em.close();
System.out.println(estados.get(0));
return estados;
@ManagedBean
@SessionScoped
public class PresencaBean implements Serializable{
private static final long serialVersionUID = 1L;
private Presenca presenca = new Presenca();
private List<Object[]> estados;
public List<Object[]> getEstados(String siglaEstado) {
if (estados == null) {
estados = new PresencaDAO<Presenca>(Presenca.class).BuscarUF(siglaEstado);
}
System.out.println(estados);
return estados;
}
public void setEstados(List<Object[]> estados) {
this.estados = estados;
}
public void carregarEstados(String UF){
Dao<Presenca> dao = new Dao<Presenca>(Presenca.class);
if (UF != null ) {
this.presenca = dao.buscaPorUF(UF);
}
}
public Presenca getPresenca() {
return presenca;
}
public void setPresenca(Presenca presenca) {
this.presenca = presenca;
}
js
setTimeout('carregaUfs()',1000);
function carregaUfs() {
var i = j = k = l = m = 0;
var D = document.getElementById('mapa');
SVGDoc = D.contentDocument;
SVGRoot = SVGDoc.documentElement;
svgns = 'http://www.w3.org/2000/svg';
var estados = SVGRoot.getElementsByTagName('path'); //array de estados
var qdeEstados = estados.length; //quantidade de registros no array
for (; i < qdeEstados; i++) {
estados[i].onclick = function(evt) {
var siglaEstado = this.id; //siglaEstado recebe a UF
// document.getElementById("formTeste:siglaEstado").value =siglaEstado;
document.location.href="rede.jsf?siglaEstado="+siglaEstado;
};
}
}
xhtml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<ui:composition template="resources/menus/_template1.xhtml">
<ui:define name="corpo">
<h:panelGrid columns="2" cellpadding="5" id="p1">
<h:form id="mapabrasil">
<object id="mapa" data="brasil.svg" type="image/svg+xml" width="350"
height="350"></object>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" />
<script type="text/javascript"
src="resources/js/jquery-1.7.2.min.js" />
<script type="text/javascript" src="resources/js/mapa.js" />
</h:form>
<!-- <h:form id="formTeste"> -->
<!-- <p:inputText id="siglaEstado"> -->
<!-- </p:inputText> -->
<!-- </h:form> -->
<h:form id="siglaEstado" >
<p:dataTable id="UF" var="presenca" value="#{presencaBean.presenca}">
<p:column headerText="Instituição">
<h:outputText value="#{presenca.instituicao}" rendered="true"/>
</p:column>
<p:column headerText="Assistidos">
<h:outputText value="#{presenca.assistidos}" rendered="true"/>
</p:column>
<p:column headerText="Desassistidos">
<h:outputText value="#{presenca.desassistidos}" rendered="true" />
</p:column>
</p:dataTable>
</h:form>
</h:panelGrid>
</ui:define>
</ui:composition>
</html>
Não sei bem mas talvez o problema seja no xhtml, pois o map redeniza e filtra por ug.
Se alguém souber como proceder para utilizar essas duas tecnologias.