You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by "Fichera, Christian (KCTP)" <Ch...@fao.org> on 2009/05/28 10:25:51 UTC

AutoCompleteTextField and IE8, javascript error thrown

Dear all,

I have a problem using AutoCompleteTextField: when I type something into it,
the choices list is not shown, and the following javascript error is thrown:
	

Webpage error details

User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0;
.NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR
3.0.04506.648)
Timestamp: Thu, 28 May 2009 08:19:40 UTC


Message: Invalid argument.
Line: 253
Char: 1
Code: 0
URI:
http://localhost:8080/TADinfo/analysis/resources/org.apache.wicket.extensions
.ajax.markup.html.autocomplete.AutoCompleteBehavior/wicket-autocomplete.js




This problem occurs only with IE8 (with IE7, IE6 and Firefox works), and
Wicket 1.3.6 (with version 1.3.4 works).

Can anybody help me?

Thank you in advance!

Here is the code: 

    private class LocalitiesAutoCompleteTextField extends
AutoCompleteTextField{


        private int type;

        private final static int MIN_CHAR = 0;
        private final static int MAX_RES = 10;
        private Object selectedObject;



        public LocalitiesAutoCompleteTextField(String id, int type,  final
IModel model){
            super(id, model);//, new LocalityListRenderer());
            this.type = type;

        }
        

        public Object getSelectedObject(){
            return selectedObject;
        }


        @Override
        public String getModelValue(){
            return super.getModelValue();
        }


        @Override
        public Iterator getChoices(String input) {
            if (!Strings.isEmpty(input)){
                List choices = new ArrayList();
                if (input.length() >= MIN_CHAR){
                    int i=0;
                    switch(type){
                        case LAYER0:
                            for (Layer0
layer0:facade.selectLayer0ByDisplayNameStartingWith(input)){
                                if (++i > MAX_RES){
                                    break;
                                }
                                choices.add(layer0);
                            }
                            for (Layer0
layer0:facade.selectLayer0ByDisplayNameContaining(input)){
                                if (++i > MAX_RES){
                                    break;
                                }
                                choices.add(layer0);
                            }
                            if (i>MAX_RES){
                                choices.add(MORE);
                            }
                            break;
                        case LAYER1:
                            for (Layer1
layer1:facade.selectLayer1ByDisplayNameStartingWith(input)){
                                if (++i > MAX_RES){
                                    break;
                                }
                                choices.add(layer1);
                            }
                            for (Layer1
layer1:facade.selectLayer1ByDisplayNameContaining(input)){
                                if (++i > MAX_RES){
                                    break;
                                }
                                choices.add(layer1);
                            }
                            if (i>MAX_RES){
                                choices.add(MORE);
                            }
                            break;
                        case LAYER2:
                            for (Layer2
layer2:facade.selectLayer2ByDisplayNameStartingWith(input)){
                                if (++i > MAX_RES){
                                    break;
                                }
                                choices.add(layer2);
                            }
                            for (Layer2
layer2:facade.selectLayer2ByDisplayNameContaining(input)){
                                if (++i > MAX_RES){
                                    break;
                                }
                                choices.add(layer2);
                            }
                            if (i>MAX_RES){
                                choices.add(MORE);
                            }
                            break;
                        case LOCALITY:
                            for (Localitydb
locality:facade.selectLocalityByDisplayNameStartingWith(input)){
                                if (++i > MAX_RES){
                                    break;
                                }
                                choices.add(locality);
                            }

                            for (Localitydb
locality:facade.selectLocalityByDisplayNameContaining(input)){
                                if (++i > MAX_RES){
                                    break;
                                }
                                choices.add(locality);
                            }
                            if (i>MAX_RES){
                                choices.add(MORE);
                            }
                            break;
                    }
                    return choices.iterator();
                }
            }
            return Collections.emptyList().iterator();
        }
    }
    
    class LocalityListRenderer extends AbstractAutoCompleteTextRenderer{
        @Override
        public void renderChoice(Object object, Response response, String
criteria) {
            String string = "";
            if (object instanceof Localitydb){
                string =
LocalityListComponentPanel.this.getPath(((Localitydb)object));
            }
            else if (object instanceof Layer2){
                string =
LocalityListComponentPanel.this.getPath(((Layer2)object));
            }
            else if (object instanceof Layer1){
                string =
LocalityListComponentPanel.this.getPath(((Layer1)object));
            }
            else if (object instanceof Layer0){
                string = ((Layer0)object).getDisplayname();
            }
            else if (object instanceof String &&
object.toString().equals(MORE)){
                response.write("<span
style=\"font-style:italic;text-align:center\">" + MORE + "</span>");
                return;
            }
            else{
                return;
            }
            if (string.contains(SEPARATOR)){
                int index = string.indexOf(SEPARATOR);
                String path = string.substring(index);
                String info = string.substring(0, index);
                StringBuffer sb = new StringBuffer();
                sb.append("<table width=\"95%\">");
                sb.append("<tr>");
                sb.append("<td align=\"left\">");
                sb.append("<span style=\"font-size:x-small\">");
                sb.append(info);
                sb.append("</span>");
                sb.append("</td>");
                sb.append("<td align=\"right\">");
                sb.append("<span
style=\"color:grey;font-style:italic;font-size:xx-small\">");
                sb.append(path);
                sb.append("</span>");
                sb.append("</td>");
                sb.append("</tr>");
                sb.append("</table>");
                response.write(sb);
            }
            else{
                response.write(string);
            }
        }
        @Override
        protected String getTextValue(Object object) {
            if (object instanceof Localitydb){
                return ((Localitydb)object).getDisplayname();
            }
            if (object instanceof Layer2){
                return ((Layer2)object).getDisplayname();
            }
            if (object instanceof Layer1){
                return ((Layer1)object).getDisplayname();
            }
            if (object instanceof Layer0){
                return ((Layer0)object).getDisplayname();
            }
            return "";
        }

    }