[ 
https://issues.apache.org/jira/browse/WW-1100?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Lukasz Lenart closed WW-1100.
-----------------------------
    Resolution: Not A Problem

> Adding autocomplete funcitonality to webwork
> --------------------------------------------
>
>                 Key: WW-1100
>                 URL: https://issues.apache.org/jira/browse/WW-1100
>             Project: Struts 2
>          Issue Type: Improvement
>          Components: Plugin - Tags
>    Affects Versions: WW 2.2.1
>            Reporter: Jeff Cunningham
>            Assignee: Lukasz Lenart
>            Priority: Minor
>
> Hi...i have a basic autocomplete functionality working using the ww:component 
> tag,  code i found from the dwr mailing list, and a style from 
> script.actulo.us. The code is based on dwr and script.aculo.us (not dojo)
> To use it, you basically need to include the new autocomplete.js file (in 
> addition to the dwr and script.aculo.us and prototype includes) and include 
> the ww:component tag. thats it. (plus the style)
> Below is the code for the autocomplete.js file:
>                       my=function(){};
>                       my.Autocompleter = Class.create();
>                       Object.extend(Object.extend(my.Autocompleter.prototype,
>                       Autocompleter.Base.prototype), {
>                           initialize: function(element, update, DWRFunction, 
> onComplete,
>                               options) {
>                               this.baseInitialize(element, update, options);
>                               this.DWRFunction           = DWRFunction;
>                               this.onComplete            = onComplete;
>                               this.options               = options || {}; // 
> none yet
>                           },
>                           getUpdatedChoices: function() {
>                                       
> this.DWRFunction(this.element.value,this.onCompleteFunction());
>                           },
>                           onCompleteFunction: function() {
>                               var t=this;
>                               return function(data) {
>                                   // Do some DWR range selection.
>                                   // This will not work with tokenised 
> autocompletion,
>                                   // so is not really recommended. But I like 
> it
>                                   var start=t.element.value.length;
>                                   t.element.value=data[0];
>                                   
> DWRUtil.selectRange(t.element,start,t.element.value.length);
>                                   t.updateChoices(t.onComplete(data));
>                               }
>                           }
>                       });             
> here is an example style:
>                 div.autocomplete_class {
>             width: 350px;
>             background: #fff;
>           }
>           div.autocomplete_class ul {
>             border:1px solid #888;
>             margin:0;
>             padding:0;
>             width:100%;
>             list-style-type:none;
>           }
>           div.autocomplete_class ul li {
>             margin:0;
>             padding:3px;
>           }
>           div.autocomplete_class ul li.selected { 
>             background-color: #ffb; 
>           }
>           div.autocomplete_class ul strong.highlight { 
>             color: #800; 
>             margin:0;
>             padding:0;
>           }
> here is how the component is called:
>                       <ww:component label="%{getText('form.label.cityName')}" 
> id="autocomplete" name="data" theme="css_xhtml" template="autocomplete">
>                               <ww:param 
> name="dwrMethod">FormHelper.getCities</ww:param>
>                               <ww:param name="minChars">4</ww:param>
>                       </ww:component>
> and below is the autocomplete.ftl from the css_xhtml directory:
> <#include "/${parameters.templateDir}/css_xhtml/controlheader.ftl" />
> <#include "/${parameters.templateDir}/simple/text.ftl" />
>                       <div class="${parameters.id}_class" 
> id="${parameters.id}_div"></div>
>                       <script type="text/javascript">
>                               var onComplete= function(data) {
>                           // The onComplete function takes one argument, 
> which is the
>                           // data returned by the DWR call.
>                           // It must return a string, which should be the
>                           // html definition of a <ul> tag with <li> tags for 
> each item.
>                           var html="<ul>";
>                           for (var i=0;i<data.length;i++) {
>                               html+="<li>"+data[i]+"</li>";
>                           }
>                           html+="</ul>";
>                           return html;
>                               }
>                               new 
> my.Autocompleter("${parameters.id}","${parameters.id}_div",${parameters.dwrMethod},
>                               onComplete, {minChars: ${parameters.minChars}});
>                       </script>
> <#include "/${parameters.templateDir}/css_xhtml/controlfooter.ftl" />
> Note that the dwrMethod is the name of a class defined in your dwr.xml file, 
> along with the method name to call to look up the results to return.
> minChars is the number of characters that are typed in the textfield before 
> sending the data to the server.
> I also had the div id and class default to a naming convention, to follow the 
> webwork convention ideas...the div id and class are just the component id 
> with _class or _id appended. this could obviously be changed.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to