Announcement

Collapse
No announcement yet.

Probleme mit suggestionbox und fetchvalue

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Probleme mit suggestionbox und fetchvalue

    Hi,

    ich benutze den JBoss Server 4.2 mit Seam 2.1.2.CR1

    Leider habe ich ein kleines Problem mit der rich:suggestionbox. In dieser Box sollen Vorschläge ausgegeben werden, die aus einer Abfrage auf eine mySQL-Datenbank stammen.
    Da die Datenmenge recht groß sein kann, wollte ich die Menge auf eine bestimmte Anzahl begrenzen.
    Soweit funktioniert alles. Die Rückgabeliste an die suggestionbox ist richtig befüllt und wird angezeigt.
    Leider existieren 2 Felder für die Anzeige in der suggestionbox (Bild | Text) und der Text soll beim Auswählen angezeigt werden - im Inputfeld. Dafür sollte man ja fetchvalue benutzen.
    Solange die Ergebnismenge unterhalb der Begrenzung bleibt, funktioniert auch alles. Aber wenn die Ergebnismenge darüber liegt und deshalb begrenzt wird, hängt sich das Ganze auf.

    zB. Eingabe z --> Ergebnismenge = 5 Elemente --> werden in der suggestionbox angezeigt.
    zB. Eingabe t --> Ergebnismenge (ohne Beschränkung) = 372 - mit Beschränkung = 10 --> wird nicht angezeigt.

    Es kommen keine Fehlermeldungen!

    Der Code:
    Die xhtml-Seite mit der suggestionbox
    Code:
    <rich:tab label="Search" name="search"
    	xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:ui="http://java.sun.com/jsf/facelets"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:f="http://java.sun.com/jsf/core"
    	xmlns:s="http://jboss.com/products/seam/taglib"
    	xmlns:rich="http://richfaces.org/rich"
    	xmlns:a4j="http://richfaces.org/a4j">
    
    	<h:inputText value="#{searchManager.searchToken}" id="search" />
    	<rich:suggestionbox for="search"
    		suggestionAction="#{searchManager.autocomplete}" 
    		var="suggest"
    		fetchValue="#{suggest.label}" >
    		
    		<rich:column style="border:0">
    			<h:graphicImage value="/icons/small/#{suggest.itemSchema.icon}" />
    		</rich:column>
    		<rich:column style="border:0">
    			<h:outputText value="#{suggest.label}" />
    		</rich:column>
    						
    	</rich:suggestionbox>
    	
    </rich:tab>
    Die Bean mit der autocomplete function
    Code:
    package ag.em.hldkp.session;
    
    import java.io.Serializable;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.jboss.seam.ScopeType;
    import org.jboss.seam.annotations.In;
    import org.jboss.seam.annotations.Name;
    import org.jboss.seam.annotations.Scope;
    
    @Name("searchManager")
    @Scope(ScopeType.SESSION)
    public class SearchManager implements Serializable{
    	private static final long serialVersionUID = -7907165763838500469L;
    
    	/**
    	 * Identity object of seam
    	 */
    	@In (create=true)
        private QueryManager queryManager;
    	
    	private String searchToken;
        
    	public String getSearchToken() {
    		return searchToken;
    	}
    
    	public void setSearchToken(String searchToken) {
    		this.searchToken = searchToken;
    	}
    	
    	public List<Object> autocomplete(Object event) {
    
    	    String pref = event.toString();
    	    List<Object> queryRs = new ArrayList<Object>();
    	    
    	    try{
    
    	    	//prop = queryManager.getQueryListResult("SELECT prop FROM Property prop where prop.propertySchema In ('name', 'lastname', 'firstname') and (prop.value like '% " + pref + "%' or prop.value like '" + pref + "%')");
    	    	queryRs = queryManager.getQueryMaxListResult("Select it from Item it where it.id in (" +
    	    			"SELECT prop.parentItem FROM Property prop where prop.propertySchema In " +
    	    			"('name', 'lastname', 'firstname') and (prop.value like '% " + pref + "%' or prop.value like '" + pref + "%'))", 5);
    	    	
    	    } catch (Exception e) {
            	e.printStackTrace();
    	    }
    	    
    	    return queryRs;
    
        }
    }
    Und die Query-Metode mit der Beschränkung
    Code:
    public List getQueryMaxListResult(String query, int max){
        	return em.createQuery(query).setMaxResults(max).getResultList();
        }
    Ich kann mir die Reaktion von Richfaces:suggestionbox einfach nicht erklären. Vielleicht wisst Ihr ja weiter.
    Danke
    Sven
Working...
X