rich:suggestion
tandrade86 Aug 15, 2008 2:55 PMHello people, I'm new in Seam...
Well, I'm trying to do an example of suggestiobbox through a mysql database, but I can't
I got a good result working with Array, so I have added some contacts and it works fine. When I tried to work with a database, I got some problems...
Someone has an example of suggestionbox with database?
Below follows my code.
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="Search Contacts" switchType="ajax"> <s:decorate template="layout/display.xhtml"> <ui:define name="label">nome</ui:define> <h:inputText id="text" value="#{contatosList.contatos.nome}" size="50"/> <rich:suggestionbox id="suggestionBox" for="text" fetchValue="#{contatosList.contatos.nome}" suggestionAction="#{contatosList.autocomplete}" height="250" width="250" var="contato"> <h:column> <h:graphicImage value="#{contatosList.contatos.foto}" /> </h:column> <h:column> <h:outputText value="#{contatosList.contatos.nome}" /> </h:column> <h:column> <h:outputText value="#{contatosList.contatos.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">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>
Contatos.java
package org.domain.AutoCompleteDB.entity; 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; @Entity @Table(name = "contatos", catalog = "thiago") public class Contatos implements java.io.Serializable { /** * */ private static final long serialVersionUID = 1L; private Long id; private String nome; private String email; private String foto; public Contatos() { } public Contatos(String nome, String email) { this.nome = nome; this.email = email; } @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; } public String getFoto() { return foto; } public void setFoto(String foto) { this.foto = foto; } public static List procurarContatos(String nome) { ArrayList contatosArray = new ArrayList(); if (nome.toUpperCase().startsWith("T")) { Contatos a = new Contatos(); a.getNome(); a.getEmail(); a.setFoto("http://tbn0.google.com/images?q=tbn:g8tttVQJ0x5oaM:http://www.portalregional.rj.gov.br/flagra/imagens/festas/325_festival_queijos_e_vinhos_nfcc/65x65/foto325_22.jpg"); contatosArray.add(a); Contatos a2 = new Contatos(); a2.getNome(); a2.getEmail(); a2.setFoto("http://tbn0.google.com/images?q=tbn:cQ46BkIb3ObU9M:http://www.portalregional.rj.gov.br/flagra/imagens/festas/402_planeta_pop_rock_farwest/65x65/foto402_10.jpg"); contatosArray.add(a2); } return contatosArray; } }
ContatosList.java
package org.domain.AutoCompleteDB.session; import org.domain.AutoCompleteDB.entity.*; import org.jboss.seam.annotations.In; import org.jboss.seam.annotations.Name; import org.jboss.seam.framework.EntityQuery; import java.util.ArrayList; 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}),'%')", }; 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); } @In(required=false) Contatos contato; List alunos; public ContatosList(){ this.alunos = new ArrayList(); } public List autocomplete(Object o){ return Contatos.procurarContatos(o.toString()); } public Contatos getContato() { return contato; } public void setAluno(Contatos contato) { this.contato = contato; } }
Thanks