Pessoal bom dia, tenho um combo Cliente e o outro contato, quero quando eu selecionar um cliente no outro combo sejam listados todos os contatos deste cliente.
Como fica isto no, DAO, Managed Bean e no xhtml.
Ta osso de entender isto, se alguém puder me ajudar…
[quote=jeferson alves]Pessoal bom dia, tenho um combo Cliente e o outro contato, quero quando eu selecionar um cliente no outro combo sejam listados todos os contatos deste cliente.
Como fica isto no, DAO, Managed Bean e no xhtml.
Ta osso de entender isto, se alguém puder me ajudar… [/quote]
Buscar o Contato de acordo com o Cliente selecionado.
a dificuldade está mais é no DAO, como posso ligar os dois, o comando sql é tranquilo, não sei como fica no código.
Bom… a ideia é:
assim que selecionar um Cliente ele Atualizar o campo contato.
tenho um exemplo classico disso é o Estado e Cidade
na pagina xhtml
<h:outputText value="Estado:"></h:outputText>
<h:column>
<p:selectOneMenu id="comboEstado" value="#{mbViagem.estado}"
converter="cvEstado">
<f:selectItem itemLabel="--- Selecione ---" itemValue="0" />
<f:selectItems value="#{mbEstado.listaEstado}" var="item"
itemLabel="#{item.nome}" itemValue="#{item}" />
<p:ajax update="dropCidade"
listener="#{mbViagem.attComboCidade}"></p:ajax>
</p:selectOneMenu>
</h:column>
<h:outputText value="Cidade:"></h:outputText>
<h:column>
<p:selectOneMenu id="dropCidade"
disabled="#{mbViagem.comboCidade}"
value="#{mbViagem.cidadeCombo}" converter="cvCidade">
<f:selectItem itemLabel="--- Selecione ---" itemValue="0" />
<f:selectItems value="#{mbViagem.listaComboCidades}"
var="item" itemLabel="#{item.nome}" itemValue="#{item}" />
<p:ajax
update="comboEstado, tabelaViagemCidades, dropCidade, hidValidaLocal"
listener="#{mbViagem.addTabelaCidadeEditar}"></p:ajax>
</p:selectOneMenu>
</h:column>
</h:panelGrid>
repare que coloquei um p:ajax dentro do selectOneMenu, pois toda vez que é selecionado é disparado a função update, contendo o id do outro combo e o metodo pra fazer isso ( attComboCidade) .
Uma coisa muito importante e bom é criar um converte… pois com isso vc pega o objeto direto.
e como o eu sempre tento manter organizado o codigo, Model fica simples fazer o metodo para att os valores…
public void attComboCidade() {
listaComboCidades = estado.getCidades();
}
no model… utilizo o Hibernate para me auxiliar junto com as anotações, e com isso eu dei o meu “select” e peguei o estado e com ele todos os campos…
caso vc nao utilize o hibernate é interessante da uma olhada nele… ele vai facilitar muito a sua vida.
model. Estado.java .
@OneToMany(mappedBy = "estado", fetch = FetchType.LAZY)
private List<Cidade> cidades;
espero ter ajudado
t+
No ajudou d+, aqui vc teria o código do DAO e do ManagedBean aí, a dificuldade maior está como eu relaciono o contato com o cliente, não estou entendendo como fica no DAO e no MB.
Vlw mesmo…
Utilizo o hibernate sim, não tinha visto a MSG toda vlw…
Aaaa então este código faz a ligação do meu Cliente com o contato, bacana
[code]
@OneToMany(mappedBy = “estado”, fetch = FetchType.LAZY)
private List<Cidade> cidades;[/code]
[quote=jeferson alves]No ajudou d+, aqui vc teria o código do DAO e do ManagedBean aí, a dificuldade maior está como eu relaciono o contato com o cliente, não estou entendendo como fica no DAO e no MB.
Vlw mesmo…[/quote]
Acho que voce precisa primeiro da uma lida sobre as anotações do Hibernate. Principalmente em OneToMany, OneToOne, ManyToMany.
classe Estado.java
package br.com.xxx.Model;
// Generated 20/07/2011 15:01:15 by Hibernate Tools 3.1.0.beta4
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import org.hibernate.annotations.Type;
@Entity
public class Estado {
// Fields
@Id
@GeneratedValue
private Long id;
private String nome;
private String sigla;
@Type(type = "true_false")
private boolean status;
@OneToMany(mappedBy = "estado", fetch = FetchType.LAZY)
// @Where(clause = "status='T'")
private List<Cidade> cidades;
//getters e setters...
}
Cidade.java
package br.com.xxxx.Model;
// Generated 20/07/2011 15:01:15 by Hibernate Tools 3.1.0.beta4
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import org.hibernate.annotations.Type;
@Entity
public class Cidade {
// Fields
@Id
@GeneratedValue
private Long id;
private String nome;
@ManyToOne
private Estado estado;
@Type(type = "true_false")
private boolean status;
}
Meu DAO que é Generico
package br.com.xxxx.DAO;
import java.util.List;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import br.com.Decom.Util.HibernateUtil;
public class DAO<T> {
private static Logger logger = Logger.getLogger(DAO.class);
private Class<T> persistentClass;
private Session session = HibernateUtil.getSession();
public DAO(Class<T> persistentClass) {
this.persistentClass = persistentClass;
}
@SuppressWarnings("unchecked")
public List<T> buscaLista() {
session.beginTransaction().begin();
Criteria c = session.createCriteria(persistentClass);
c.add(Restrictions.eq("status", true));
List<T> lista = c.list();
// session.beginTransaction().begin();
// logger.info("ListandoTodosGenerico " + persistentClass );
// List<T> lista = session.createCriteria(persistentClass).list();
session.beginTransaction().commit();
return lista;
}
public void salva(T t) {
session.beginTransaction().begin();
logger.info("SalvandoGenerico " + t);
session.save(t);
session.beginTransaction().commit();
}
public void atualiza(T t) {
session.beginTransaction().begin();
logger.info("AtualizandoGenerico " + t);
session.update(t);
session.beginTransaction().commit();
}
public void merge(T t) {
logger.info("Salvando ou atualizando" + t);
session.merge(t);
}
public void deleta(T t) {
session.beginTransaction().begin();
logger.info("DeletandoGenerico do id = " + t);
session.update(t);
session.beginTransaction().commit();
}
}
Ok… ae ta toda a estrutura q precisa.
agora no seu ManagerBean voce precisa carregar as informações…
mbEstado
[code]
//Declara as variaveis...
DAO<Estado> daoEstado = new DAO<Estado>(Estado.class);
List<Estado> listaEstado = new ArrayList<Estado>();
//GET E SET
public void setListaEstado(List<Estado> listaEstado) {
this.listaEstado = listaEstado;
}
public List<Estado> getListaEstado() {
attLista();//Aqui chamoo metodo para carregar a lista do Banco (nao sei se é a maneira certa de se fazer)
return listaEstado;
}
public String attLista() {
listaEstado = daoEstado.buscaLista();
return "ok";
}[/code]
Bom… agora temos a lista para mostrar na Tela… ae agora
voce utiliza o codigo q ja postei em cima da pagina… .xhtml
ae no combo, coloca o ajax, contendo o id do componente que quer atualizar usando a função “update”
e a função “listener” para executar o metodo que vai atualizar as cidades.
vou posta o meu converter pq acho interessante ter. ainda nao tive tempo de trabalhar nele e deixa-lo generico.
o codigo fica bem mais limpo utilizando ele.
package br.com.xxxx.Conversores;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import br.com.xxxx.DAO.DAO;
import br.com.xxxx.Model.Estado;
@FacesConverter("cvEstado")
public class cvEstado implements Converter {
DAO<Estado> dao = new DAO<Estado>(Estado.class);
@Override
public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {
try {
return dao.busca(arg2);
} catch (NumberFormatException e) {
return new Estado();
}
}
@Override
public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {
try {
return String.valueOf(((Estado) arg2).getId());
} catch (Exception e) {
return "";
}
}
}
Agora mãos a obra
Aaaa então este código faz a ligação do meu Cliente com o contato, bacana
[code]
@OneToMany(mappedBy = “estado”, fetch = FetchType.LAZY)
private List<Cidade> cidades;[/code][/quote]
isso com esse codigo e como vc estivesse dando um select no banco na tabela cidade e dando um where passando o id do estado … tudo isso com um simples objeto.cidades
por isso que falo pra vc saber mais das anotações do hibernate
Cara Deus te abençoe, vou estudar mais sim preciso muito, agora estou entendendo, vou fazer aqui e te falo, vlw…
Olá galera, tudo bem? Sou novato na área e estou tentando a alguns dias salvar dados de um lugar em outro. Vou explicar…
Tenho três tabelas a princípio: Autores, Acervo, e AcervoxAutores. Tenho vários campos nas mesmas, mas em particular, tenho duas FK na tabela de AcervoxAutores (uma relacionando autores e outra acervo.
Pretendo fazer o seguinte, colocar no xhtml de ACERVO um autoComplete no qual ele pega a lista de autores que eu tenho no meu autoreslist e salve na TABELA de AcervoxAutores.
Por exemplo, se eu colocar como value acervoJsfBean.crudObj.acdd (sendo acdd um campo que possuo em acervo e que seja string) ele está salvando normal na tabela de acervo. Porém não é esse meu objetivo. Quero colocar o bean de acervoxautores.crudObj.( algum dos dois campos que eu tenho na tabela de acervoxautores para salvar lá dentro, mas n está dando certo. Além disso, o código vai ser gerado automático e o campo de acervo deveria pegar o código do acervo
Segue abaixo os códigos relacionados:
AcervoxAutores.java
[code]@Entity
@Table(name = “BIB_ACERVOXAUTORES”)
public class AcervoxAutores implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "GEN_BIBACERVOXAUTORES")
@SequenceGenerator(name = "GEN_BIBACERVOXAUTORES", sequenceName = "GEN_BIBACERVOXAUTORES", allocationSize = 1, initialValue = 1)
@Column(name = "ACXAUT_CODIGO")
private Integer acxautCodigo;
@JoinColumn(name = "ACXAUT_CODAUTOR", referencedColumnName = "AUT_CODIGO")
@ManyToOne
private Autores acxautautor;
@JoinColumn(name = "ACXAUT_CODACERVO", referencedColumnName = "ACE_CODIGO")
@ManyToOne
private Acervo acxautacervo;
public AcervoxAutores() {
}
public AcervoxAutores(Integer acxautCodigo) {
this.acxautCodigo = acxautCodigo;
}
public Integer getAcxautCodigo() {
return acxautCodigo;
}
public void setAcxautCodigo(Integer acxautCodigo) {
this.acxautCodigo = acxautCodigo;
}
public Autores getAcxautautor() {
return acxautautor;
}
public void setAcxautautor(Autores acxautautor) {
this.acxautautor = acxautautor;
}
public Acervo getAcxautacervo() {
return acxautacervo;
}
public void setAcxautacervo(Acervo acxautacervo) {
this.acxautacervo = acxautacervo;
}
@Override
public int hashCode() {
int hash = 0;
hash += (acxautCodigo != null ? acxautCodigo.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof AcervoxAutores)) {
return false;
}
AcervoxAutores other = (AcervoxAutores) object;
if ((this.acxautCodigo == null && other.acxautCodigo != null) || (this.acxautCodigo != null && !this.acxautCodigo.equals(other.acxautCodigo))) {
return false;
}
return true;
}
@Override
public String toString() {
return acxautautor.toString();
}
}
AcervoxAutoresService:
@Stateless
@LocalBean
public class AcervoxAutoresService {
public static final String PREFIXO_OBJETO = "aa";
private static final String QUERY_AcervoxAutores = "select aa from AcervoxAutores aa";
private static final Logger log = LoggerFactory.getLogger(AcervoxAutoresService.class);
@EJB
private CrudService crudService;
private FiltrosConsulta criaFiltros(Map<String, Object> params) {
FiltrosConsulta filtros = new FiltrosConsulta();
filtros.add("UPPER(aa.acxautautor.autCodigo) like :acxautautor", "acxautautor", params.get("acxautautor"), true, FiltrosConsulta.Like.Both);
filtros.add("UPPER(aa.acxautacervo.aceCodigo) like :acxautacervo", "acxautacervo", params.get("acxautacervo"), true, FiltrosConsulta.Like.Both);
return filtros;
}
@TransactionAttribute(TransactionAttributeType.NEVER)
public List<AcervoxAutores> listaAcervoxAutoresRelatorio(Map<String, Object> parametros) {
String orderBy = ServiceUtil.montaOrderBy("acxautCodigo", true, PREFIXO_OBJETO);
return crudService.executeQuery(QUERY_AcervoxAutores, orderBy, criaFiltros(parametros));
}
}
Acervo.java
@Entity
@Table(name = “BIB_ACERVO”)
public class Acervo implements Serializable, Auditable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "GEN_BIBACERVO")
@SequenceGenerator(name = "GEN_BIBACERVO", sequenceName = "GEN_BIBACERVO", allocationSize = 1, initialValue = 1)
@Column(name = "ACE_CODIGO")
private Integer aceCodigo;
@Size(max = 200)
@Column(name = "ACE_TITULO")
private String aceTitulo;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "acxautacervo")
private Collection<AcervoxAutores> bibAcervoxAutoresCollection;
AcervoJsfBean:
@ManagedBean
@ViewScoped //@ViewScoped //@SessionScoped
public class AcervoJsfBean extends BaseCRUDJSFBean {
public static final String RELATORIO_ACERVO = "acervo";
private static Logger log = LoggerFactory.getLogger(AcervoJsfBean.class);
@EJB
private AcervoService a;
@EJB
private TipoMaterialService m;
@EJB
private IdiomaService i;
@EJB
private EditorasService e;
@EJB
private AutoresService y;
@EJB
private ClassificacaoService c;
@EJB
private AcervoxAutoresService aa;
private List<Acervo> acervoList = new ArrayList<Acervo>();
private List<TipoMaterial> TipoMaterialList = new ArrayList<TipoMaterial>();
private List<Idioma> idiomaList = new ArrayList<Idioma>();
private List<Editoras> editorasList = new ArrayList<Editoras>();
private List<Classificacao> classificacaoList = new ArrayList<Classificacao>();
private List<Autores> autoresList = new ArrayList<Autores>();
private List<AcervoxAutores> acervoxautoresList = new ArrayList<AcervoxAutores>();
private String aceTitulo;
private String aceSubtitulo;
private String aceIsbn;
private String aceLocalizacao;
private String aceeditora;
private String aceidioma;
private String aceclass;
private String acetipomate = "";
private Classificacao aceClasFiltro;
public List<AcervoxAutores> getAcervoxautoresList() {
return acervoxautoresList;
}
public void setAcervoxautoresList(List<AcervoxAutores> acervoxautoresList) {
this.acervoxautoresList = acervoxautoresList;
}
public List<Acervo> getAcervoList() {
return acervoList;
}
public void setAcervoList(List<Acervo> acervoList) {
this.acervoList = acervoList;
}
public List<TipoMaterial> getTipoMaterialList() {
return TipoMaterialList;
}
public void setTipoMaterialList(List<TipoMaterial> TipoMaterialList) {
this.TipoMaterialList = TipoMaterialList;
}
public List<Idioma> getIdiomaList() {
return idiomaList;
}
public void setIdiomaList(List<Idioma> idiomaList) {
this.idiomaList = idiomaList;
}
public List<Editoras> getEditorasList() {
return editorasList;
}
public void setEditorasList(List<Editoras> editorasList) {
this.editorasList = editorasList;
}
public List<Classificacao> getClassificacaoList() {
return classificacaoList;
}
public void setClassificacaoList(List<Classificacao> classificacaoList) {
this.classificacaoList = classificacaoList;
}
public Classificacao getAceClasFiltro() {
return aceClasFiltro;
}
public void setAceClasFiltro(Classificacao aceClasFiltro) {
this.aceClasFiltro = aceClasFiltro;
}
public List<Autores> getAutoresList() {
return autoresList;
}
public void setAutoresList(List<Autores> autoresList) {
this.autoresList = autoresList;
}
@Override
protected void setup() {
super.setup();
this.TipoMaterialList = getCrudService().findAll(TipoMaterial.class, "tipoDescricao");
this.idiomaList = getCrudService().findAll(Idioma.class, "idiDescricao");
this.editorasList = getCrudService().findAll(Editoras.class, "ediDescricao");
this.classificacaoList = getCrudService().findAll(Classificacao.class, "clasDescricao");
this.autoresList = getCrudService().findAll(Autores.class, "autDescricao");
this.acervoList = getCrudService().findAll(Acervo.class, "aceCodigo");
}
@Override
public void criaObjeto() {
super.criaObjeto();
Date data = new Date();
crudObj.setAceDatacad(data);
// for (int i = 0; i < 5; i++) { // tenta gravar 5 registros no banco
// Exemplar e = new Exemplar();
// e.setExeCodigo(8);
//
// e.setExeacervo(crudObj); // passa um valor
// e.setExeDatabaixa(data);
// e.setExeVolume(9);
// e.setExeDatacad(data);
// e.setExeExemplar(6);
// e.setExeLocalizacao(“14F”);
// e.setExeMotivbaixa(“Devolução”);
// e.setExeObs(“Observação”);
// e.setExeSituacao(“Baixado”);
// e.setExeVolume(4); // passa um valor
//
//
// crudObj.getBibAcervoCollection().add(e); //adiciona na collection
// }
}
public void geraRelatorioAcervoPDF() {
geraRelatorioAcervo(true);
}
public void geraRelatorioAcervo(boolean isPDF) {
List<Acervo> listaRelatorio = a.listaAcervoRelatorio(montaParametros());
if (isPDF) {
// Relatatório em PDF com folha de rosto padrão
geraRelatorioPDF(listaRelatorio, RELATORIO_ACERVO);
}
}
public AcervoJsfBean() {
}
@Override
public void renovarTabela() {
filtraAcervo();
}
public void filtraAcervo() {
acervoList = a.listaAcervoRelatorio(montaParametros());
}
private Map<String, Object> montaParametros() {
Map<String, Object> p = new HashMap<String, Object>();
p.put("aceTitulo", aceTitulo);
p.put("aceSubtitulo", aceSubtitulo);
p.put("aceIsbn", aceIsbn);
p.put("aceLocalizacao", aceLocalizacao);
p.put("aceeditora", aceeditora);
p.put("aceidioma", aceidioma);
p.put("aceclass", aceclass);
p.put("acetipomate", acetipomate);
return p;
}
public List<Classificacao> completaClassificacao(String query) {
this.classificacaoList = c.findClassificacaoByNome(query);
return c.findClassificacaoByNome(query);
}
public List<Autores> completaAutores(String query) {
this.autoresList = y.findAutoresByNome(query);
return y.findAutoresByNome(query);
}
public List<Acervo> completaAcervo(String query) {
this.acervoList = a.findAcervoByNome(query);
return a.findAcervoByNome(query);
}
Acervo.xhtml (nele só vou pegar a parte do autocomplete:
<p:outputLabel id=“autores_lbl” value=“Autores” for=“acautores”/>
<p:autoComplete id=“acautores” completeMethod="#{acervoJsfBean.completaAutores}" required=“false” multiple=“false” requiredMessage=“Informe o autor” forceSelection=“true” minQueryLength=“1” queryDelay=“1”
dropdown=“true” var=“y” itemLabel="#{y.autDescricao}" itemValue="#{y.autCodigo}" value="#{acervoxAutoresJsfBean.crudObj.acxautautor}">
<p:ajax event=“itemSelect” listener="#{acervoJsfBean.autoresList}"/>
</p:autoComplete> [/code]
OBS: se possível onde tem o value="#{acervoxAutoresJsfBean.crudObj.acxautautor}"> façam o teste com value="#{acervoJsfBean.crudObj.aceTitulo}">
Se puderem ajudar, agradeço muitoo!!
da uma olhada sobre o primefaces ele tem um componente, que faz a função de autocomplete da uma olhada la
la tem a demo dos componentes.
http://www.primefaces.org/showcase-labs/ui/autocompleteHome.jsf