PrimeFaces ショーケースで読んだように、autoComplete が機能するにはコンバーターが必要なので、次のようにしました。
<p:autoComplete id="ListaInst"
emptyMessage="Nenhuma instituição encontrada."
value="#{InstituicaoController.inst1}"
completeMethod="#{InstituicaoController.getInstituicoesLike}"
var="i"
itemLabel="#{i.inst_nome}"
itemValue="#{i}"
converter="instituicaoConverter"
required="true"
style="width: 200px;font-family: monospace; font-size: 14px; margin-top: 4px;" />
マネージド Bean メソッド:
public Collection<Instituicao> getInstituicoesLike(String searchKeyword) {
InstituicaoDao dao = new InstituicaoDao();
Collection<Instituicao> instituicoes = dao.getInstituicoesLike(searchKeyword);
return instituicoes;
}
DAO メソッド:
public Collection<Instituicao> getInstituicoesLike(String searchKeyword) {
Session ss = HibernateUtil.getSessionFactory().getCurrentSession();
try {
ss.beginTransaction();
List instituicoes = ss.createCriteria(Instituicao.class).add(Restrictions.like("inst_nome", searchKeyword)).list();
ss.beginTransaction().commit();
ss.close();
ss.clear();
return instituicoes;
} catch(HibernateException e) {
ss.getTransaction().rollback();
ss.close();
ss.clear();
}
return null;
}
JTA、JPA 2.1、JSF 2.2、EJB 3.1、および Hibernate 4.3.4 を使用する方がよいことはわかっていますが (これらを使用しても完全に機能しました)、私が取り組んでいるプロジェクトでそれが受け入れられるかどうかはわかりません。心の狭い開発者は、「すべてをもう一度学習する」ことを望んでおらず、コードのようなものthis.manager.persist(entity)
は上記のボイラープレートよりも悪いと考えています。
PS: コンバーター コード:
package br.com.solidaria.converters;
import br.com.solidaria.dao.InstituicaoDao;
import br.com.solidaria.model.Instituicao;
import javax.faces.component.*;
import javax.faces.context.*;
import javax.faces.convert.*;
/**
*
* @author Rodrigo Sieja Bertin
*/
@FacesConverter(forClass = Instituicao.class, value = "instituicaoConverter")
public class InstituicaoConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
InstituicaoDao dao = new InstituicaoDao();
Instituicao i = InstituicaoDao.getById(Integer.parseInt(value));
return i;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
Instituicao i = (Instituicao) value;
return String.valueOf(i.getId());
}
}