1 24 package org.riotfamily.forms.element.suggest; 25 26 import java.io.IOException ; 27 import java.io.PrintWriter ; 28 import java.util.Collection ; 29 import java.util.Iterator ; 30 31 import javax.servlet.http.HttpServletRequest ; 32 import javax.servlet.http.HttpServletResponse ; 33 34 import org.riotfamily.common.markup.DocumentWriter; 35 import org.riotfamily.common.markup.Html; 36 import org.riotfamily.common.markup.TagWriter; 37 import org.riotfamily.forms.ContentElement; 38 import org.riotfamily.forms.DHTMLElement; 39 import org.riotfamily.forms.element.AbstractTextElement; 40 import org.riotfamily.forms.resource.FormResource; 41 import org.riotfamily.forms.resource.ResourceElement; 42 import org.riotfamily.forms.resource.Resources; 43 44 48 public class AutocompleteTextField extends AbstractTextElement 49 implements ResourceElement, DHTMLElement, ContentElement { 50 51 private AutocompleterModel model; 52 53 public void setModel(AutocompleterModel model) { 54 this.model = model; 55 } 56 57 public FormResource getResource() { 58 return Resources.SCRIPTACULOUS_CONTROLS; 59 } 60 61 public void renderInternal(PrintWriter writer) { 62 super.renderInternal(writer); 63 TagWriter tag = new TagWriter(writer); 64 tag.start(Html.DIV).attribute(Html.COMMON_ID, getChoicesDivId()) 65 .attribute(Html.COMMON_CLASS, "autocomplete") 66 .attribute(Html.COMMON_STYLE, "display:none") 67 .end(); 68 } 69 70 private String getChoicesDivId() { 71 return getId() + "-choices"; 72 } 73 74 public String getInitScript() { 75 StringBuffer sb = new StringBuffer (); 76 sb.append("new Ajax.Autocompleter(\"").append(getId()).append("\", \"") 77 .append(getChoicesDivId()).append("\", \"") 78 .append(getFormContext().getContentUrl(this)).append("\", {});"); 79 80 return sb.toString(); 81 } 82 83 public void handleContentRequest(HttpServletRequest request, 84 HttpServletResponse response) throws IOException { 85 86 String search = request.getParameter(getParamName()); 87 Collection suggestions = model.getSuggestions(search); 88 89 DocumentWriter doc = new DocumentWriter(response.getWriter()); 90 doc.start(Html.UL); 91 Iterator it = suggestions.iterator(); 92 while (it.hasNext()) { 93 String value = (String ) it.next(); 94 doc.start(Html.LI).body(value).end(); 95 } 96 doc.end(); 97 } 98 } 99 | Popular Tags |