Antes de me crucificarem por postar isso novamente eu digo: sim eu usei a busca. Mas tentei de todos os jeitos e não consegui...
Vi que precisava de implementar um converter e fiz isso, mas agora está dando:
publicCollection<SelectItem>getCarregarSelect(){ArrayListlist=newArrayList();Collection<SelectItem>lst=newArrayList<SelectItem>();List<City>lista=carregarLista;//carregue sua lista de cidades aquifor(inti=0;i<lista.size();i++){lst.add(newSelectItem(lista.get(i).getId(),lista.get(i).getNomeCidade()));}returnlst;}
Fiz do jeito que tu falou, mas como campo ta como required=“true”.
Agora ta dando como se o campo estivesse vazio e mostrando mensagem configurada por mim de campo vazio.
Coloquei da seguinte forma:
No MB:
public Collection<SelectItem> getCarregarSelect() {
Collection<SelectItem> lst = new ArrayList<SelectItem>();
List<City> lista = this.cityRepository.findByState(this.state);
for (int i = 0; i < lista.size(); i++) {
lst.add(new SelectItem(lista.get(i).getCityId(), lista.get(i).getCity()));
}
return lst;
}
Na página:
publicCollection<SelectItem>getCarregarSelect(){Collection<SelectItem>lst=newArrayList<SelectItem>();lst.add(newSelectItem("valor","O que vai aparecer escrito no select"));//aquiList<City>lista=this.cityRepository.findByState(this.state);for(inti=0;i<lista.size();i++){lst.add(newSelectItem(lista.get(i).getCityId(),lista.get(i).getCity()));}returnlst;}
publicCollection<SelectItem>getCarregarSelect(){Collection<SelectItem>lst=newArrayList<SelectItem>();lst.add(newSelectItem("valor","O que vai aparecer escrito no select"));//aquiList<City>lista=this.cityRepository.findByState(this.state);for(inti=0;i<lista.size();i++){lst.add(newSelectItem(lista.get(i).getCityId(),lista.get(i).getCity()));}returnlst;}
Fiz do jeito que tu falou, porém ainda está dando que o valor selecionado está vazio.
Acho que tem algo de errado com o converter, mas não consegui indentificar:
Não será pq o @EJB não foi injetado não? Você verificou isso?
Pq vc não tenta por lookup ao invés de Injection?
Converters ainda não estão dendo do contexto de JSF (Será uma nova feature do JSF 2.2).
A
AdrianoLisboa
jakefrog:
Cara, na boa. Volte seu código ao que estava no começo do tópico.
Seu erro era:
Não será pq o @EJB não foi injetado não? Você verificou isso?
Pq vc não tenta por lookup ao invés de Injection?
Converters ainda não estão dendo do contexto de JSF (Será uma nova feature do JSF 2.2).
Fiz por lookup e agora está dando o erro do ínicio antes de implementar o converter:
j_idt7:city:Errodevalidação:ovalornãoéválido
EJB:
public City findById(Long id) {
TypedQuery<City> query = (TypedQuery<City>) this.entityManager
.createQuery("FROM City where city_id = :city");
query.setParameter("city", id);
return query.getSingleResult();
}
Não é assim que se faz, cara ^^ public City findById(Long id) {
javax.persistence.Query query = (Query) this.entityManager.find(City.class, id);
return (City) query.getSingleResult();
} Você está tentando jogar o resultado de uma busca, que ja é o objeto que você quer, em uma Query, não tem pra que. Mude pra isso:public City findById(Long id) {
City city = this.entityManager.find(City.class, id);
return city;
} ou simplesmente: public City findById(Long id) {
return this.entityManager.find(City.class, id);
}
A
AdrianoLisboa
digaoneves:
Não é assim que se faz, cara ^^ public City findById(Long id) {
javax.persistence.Query query = (Query) this.entityManager.find(City.class, id);
return (City) query.getSingleResult();
} Você está tentando jogar o resultado de uma busca, que ja é o objeto que você quer, em uma Query, não tem pra que. Mude pra isso:public City findById(Long id) {
City city = this.entityManager.find(City.class, id);
return city;
} ou simplesmente: public City findById(Long id) {
return this.entityManager.find(City.class, id);
}
Burrice minha, rsrs…
Coloquei do jeito que tu falou:
public City findById(Long id) {
return this.entityManager.find(City.class, id);
}
Mas ainda continua dando:
j_idt7:city:Errodevalidação:ovalornãoéválido
Ta foda isso…
A
andre.froes
Para quê exatamente você está utilizando o converter? Pelo visto, aqui, ele só te está apresentando problemas em algo que não têm problema algum. Se você, daquela forma do collection, adicionar valor vazio:
lst.add(new SelectItem("", "O que vai aparecer escrito no select"));
que seria o value dele, ele já vai cair na validação, porque o valor é null e é necessário, caso não seja null, você já sabe que o valor é válido, e se precisar converter algo, você pode fazer a conversão do elemento dentro do #{userMB.city}
por exemplo, o valor que você passou, ao invés de ser String é um Integer, então:
Para quê exatamente você está utilizando o converter? Pelo visto, aqui, ele só te está apresentando problemas em algo que não têm problema algum. Se você, daquela forma do collection, adicionar valor vazio:
lst.add(new SelectItem("", "O que vai aparecer escrito no select"));
que seria o value dele, ele já vai cair na validação, porque o valor é null e é necessário, caso não seja null, você já sabe que o valor é válido, e se precisar converter algo, você pode fazer a conversão do elemento dentro do #{userMB.city}
por exemplo, o valor que você passou, ao invés de ser String é um Integer, então:
Vi que seu projeto é EJB, no convert esta tendando fazer a injeção com anotação @EJB,
isso nao funciona no convert da uma olhada na net sobre EJB IOC.
seu getAsObject do convert o metodo “this.cityRepository.findById(Long.valueOf(value));” retorna sempre nulo.
Tem se ser feito um lookup para a injeção do ejb, muito manual.
Cria a inteface remota (CityRepositoryRemote) com @Remote e no convert coloca o lookup na mão, o selectmenu esta correto e o bean tamém ficou faltando somente isso.
Vi que seu projeto é EJB, no convert esta tendando fazer a injeção com anotação @EJB,
isso nao funciona no convert da uma olhada na net sobre EJB IOC.
seu getAsObject do convert o metodo “this.cityRepository.findById(Long.valueOf(value));” retorna sempre nulo.
Tem se ser feito um lookup para a injeção do ejb, muito manual.
Cria a inteface remota (CityRepositoryRemote) com @Remote e no convert coloca o lookup na mão, o selectmenu esta correto e o bean tamém ficou faltando somente isso.
Cara acho que estou com o mesmo problema que voce passou ai em cima, só que estou tentando fazer o lookup manual e não estou conseguindo, tem como me ajudar? Posso postar o fonte?