Galera, fiz aqui alguns testes e o erro anterior mudou… criei um novo projeto usando o seam generator e estou tentando adaptar o suggestionbox em uma das telas… agora o que está acontecendo, é que está trazendo o suggestion vazio…
dá um help ai galera… to errando em alguma bobeira de logica…
segue os codigos…
Contatos.java
package org.domain.Contatos.entity;
// Generated 15/08/2008 10:39:02 by Hibernate Tools 3.2.2.GA
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* Contatos generated by hbm2java
*/
@Entity
@Table(name = "contatos", catalog = "thiago")
public class Contatos implements java.io.Serializable {
private Long id;
private String nome;
private String email;
private String foto;
public Contatos() {
}
public Contatos(String nome, String email, String foto) {
this.nome = nome;
this.email = email;
this.foto = foto;
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "nome")
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Column(name = "email")
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
@Column(name = "foto")
public String getFoto() {
return this.foto;
}
public void setFoto(String foto) {
this.foto = foto;
}
public static List procurarContatos(String nome) {
ArrayList contatos = new ArrayList();
if(nome.toUpperCase().startsWith("A")) {
Contatos a = new Contatos();
a.getNome();
a.getEmail();
a.getFoto();
contatos.add(a);
}
return contatos;
}
}
ContatosHome
package org.domain.Contatos.session;
import java.util.ArrayList;
import java.util.List;
import org.domain.Contatos.entity.*;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.framework.EntityHome;
@Name("contatosHome")
public class ContatosHome extends EntityHome<Contatos> {
public void setContatosId(Long id) {
setId(id);
}
public Long getContatosId() {
return (Long) getId();
}
@Override
protected Contatos createInstance() {
Contatos contatos = new Contatos();
return contatos;
}
public void wire() {
getInstance();
}
public boolean isWired() {
return true;
}
public Contatos getDefinedInstance() {
return isIdDefined() ? getInstance() : null;
}
@In(required=false) Contatos contato;
List contatos;
public ContatosHome() {
this.contatos = new ArrayList();
}
public List autocomplete(Object o) {
return Contatos.procurarContatos(o.toString());
}
public Contatos getContatos(){
return contato;
}
public void setContatos(Contatos contato) {
this.contato = contato;
}
}
ContatosList
package org.domain.Contatos.session;
import org.domain.Contatos.entity.*;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.framework.EntityQuery;
import java.util.List;
import java.util.Arrays;
@Name("contatosList")
public class ContatosList extends EntityQuery {
private static final String[] RESTRICTIONS = {
"lower(contatos.nome) like concat(lower(#{contatosList.contatos.nome}),'%')",
"lower(contatos.email) like concat(lower(#{contatosList.contatos.email}),'%')",
"lower(contatos.foto) like concat(lower(#{contatosList.contatos.foto}),'%')", };
private Contatos contatos = new Contatos();
@Override
public String getEjbql() {
return "select contatos from Contatos contatos";
}
@Override
public Integer getMaxResults() {
return 25;
}
public Contatos getContatos() {
return contatos;
}
@Override
public List<String> getRestrictions() {
return Arrays.asList(RESTRICTIONS);
}
}
Contatos.xhtml - Essa é uma pagina gerada pelo Seam, que traz o resultado do banco... ai peguei a mesma string que eles usam para puxar os meus contatos no suggestion... mas não deu muito certo...
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
template="layout/template.xhtml">
<ui:define name="body">
<h:messages globalOnly="true" styleClass="message" id="globalMessages"/>
<rich:panel>
<f:facet name="header">Contatos</f:facet>
<s:decorate id="nome" template="layout/display.xhtml">
<ui:define name="label">nome</ui:define>
#{contatosHome.instance.nome}
</s:decorate>
<s:decorate id="email" template="layout/display.xhtml">
<ui:define name="label">email</ui:define>
#{contatosHome.instance.email}
</s:decorate>
<s:decorate id="foto" template="layout/display.xhtml">
<ui:define name="label">foto</ui:define>
#{contatosHome.instance.foto}
</s:decorate>
<div style="clear:both"/>
</rich:panel>
<div class="actionButtons">
<s:button view="/ContatosEdit.xhtml"
id="edit"
value="Edit"/>
<s:button view="/#{empty contatosFrom ? 'ContatosList' : contatosFrom}.xhtml"
id="done"
value="Done"/>
</div>
</ui:define>
</ui:composition>
ContatosList.xhtml
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:s="http://jboss.com/products/seam/taglib"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rich="http://richfaces.org/rich"
template="layout/template.xhtml">
<ui:define name="body">
<h:messages globalOnly="true" styleClass="message" id="globalMessages"/>
<h:form id="contatosSearch" styleClass="edit">
<rich:simpleTogglePanel label="Contatos search parameters" switchType="ajax">
<s:decorate template="layout/display.xhtml">
<ui:define name="label">nome</ui:define>
<h:inputText id="nome" value="#{contatosList.contatos.nome}" size="50"/>
<rich:suggestionbox id="suggestionbox"
for="nome"
fetchValue="#{contatosList.contatos.nome}"
suggestionAction="#{contatosHome.autocomplete}"
height="250"
width="250"
var="contato">
<h:column>
<h:graphicImage value="#{contatosHome.instance.foto}" />
</h:column>
<h:column>
<h:outputText value="#{contatosHome.instance.nome}" />
</h:column>
<h:column>
<h:outputText value="#{contatosHome.instance.email}" />
</h:column>
</rich:suggestionbox>
</s:decorate>
</rich:simpleTogglePanel>
<div class="actionButtons">
<h:commandButton id="search" value="Search" action="/ContatosList.xhtml"/>
</div>
</h:form>
<rich:panel>
<f:facet name="header">Contatos search results</f:facet>
<div class="results" id="contatosList">
<h:outputText value="The contatos search returned no results."
rendered="#{empty contatosList.resultList}"/>
<rich:dataTable id="contatosList"
var="contatos"
value="#{contatosList.resultList}"
rendered="#{not empty contatosList.resultList}">
<h:column>
<f:facet name="header">
<s:link styleClass="columnHeader"
value="id #{contatosList.order=='id asc' ? messages.down : ( contatosList.order=='id desc' ? messages.up : '' )}">
<f:param name="order" value="#{contatosList.order=='id asc' ? 'id desc' : 'id asc'}"/>
</s:link>
</f:facet>
#{contatos.id}
</h:column>
<h:column>
<f:facet name="header">
<s:link styleClass="columnHeader"
value="nome #{contatosList.order=='nome asc' ? messages.down : ( contatosList.order=='nome desc' ? messages.up : '' )}">
<f:param name="order" value="#{contatosList.order=='nome asc' ? 'nome desc' : 'nome asc'}"/>
</s:link>
</f:facet>
#{contatos.nome}
</h:column>
<h:column>
<f:facet name="header">
<s:link styleClass="columnHeader"
value="email #{contatosList.order=='email asc' ? messages.down : ( contatosList.order=='email desc' ? messages.up : '' )}">
<f:param name="order" value="#{contatosList.order=='email asc' ? 'email desc' : 'email asc'}"/>
</s:link>
</f:facet>
#{contatos.email}
</h:column>
<h:column>
<f:facet name="header">
<s:link styleClass="columnHeader"
value="foto #{contatosList.order=='foto asc' ? messages.down : ( contatosList.order=='foto desc' ? messages.up : '' )}">
<f:param name="order" value="#{contatosList.order=='foto asc' ? 'foto desc' : 'foto asc'}"/>
</s:link>
</f:facet>
#{contatos.foto}
</h:column>
<h:column>
<f:facet name="header">action</f:facet>
<s:link view="/#{empty from ? 'Contatos' : from}.xhtml"
value="Select"
id="contatos">
<f:param name="contatosId"
value="#{contatos.id}"/>
</s:link>
</h:column>
</rich:dataTable>
</div>
</rich:panel>
<div class="tableControl">
<s:link view="/ContatosList.xhtml"
rendered="#{contatosList.previousExists}"
value="#{messages.left}#{messages.left} First Page"
id="firstPage">
<f:param name="firstResult" value="0"/>
</s:link>
<s:link view="/ContatosList.xhtml"
rendered="#{contatosList.previousExists}"
value="#{messages.left} Previous Page"
id="previousPage">
<f:param name="firstResult"
value="#{contatosList.previousFirstResult}"/>
</s:link>
<s:link view="/ContatosList.xhtml"
rendered="#{contatosList.nextExists}"
value="Next Page #{messages.right}"
id="nextPage">
<f:param name="firstResult"
value="#{contatosList.nextFirstResult}"/>
</s:link>
<s:link view="/ContatosList.xhtml"
rendered="#{contatosList.nextExists}"
value="Last Page #{messages.right}#{messages.right}"
id="lastPage">
<f:param name="firstResult"
value="#{contatosList.lastFirstResult}"/>
</s:link>
</div>
<s:div styleClass="actionButtons" rendered="#{empty from}">
<s:button view="/ContatosEdit.xhtml"
id="create"
value="Create contatos">
<f:param name="contatosId"/>
</s:button>
</s:div>
</ui:define>
</ui:composition>