Help

Controls

PermLinkWikiLink

Built with Seam

You can find the full source code for this website in the Seam package in the directory /examples/wiki. It is licensed under the LGPL.

Forum: Seam Users Forum ListTopic List
15. Aug 2008, 14:55 CET | Link

Hello 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

1 Reply:
19. Sep 2008, 15:47 CET | Link
I create a simple document that explain the use of rich:suggestionbox

http://www.seamframework.org/Documentation/AutocompleteWithRichsuggestionbox
 

Jony Santos