MultiAutoCompleteTextField for Wicket - PullRequest
       19

MultiAutoCompleteTextField for Wicket

0 голосов
/ 24 ноября 2011

Мне нужен AutoCompleteTextField для Wicket, который может обрабатывать несколько элементов автозаполнения, разделенных запятой.

Примерно так: http://digitarald.de/project/autocompleter/1-1/showcase/delicious-tags/

Ответы [ 3 ]

5 голосов
/ 24 ноября 2011

Wicket-extensions предоставляет функции автозаполнения.

Добавьте AutoCompleteBehavior к TextArea таким же образом AutoCompleteTextField использует его.

Например:

TextArea t = new TextArea("area", new Model());
AutoCompleteBehavior<String> b = new AutoCompleteBehavior<String>(
            StringAutoCompleteRenderer.INSTANCE){
    @Override
    protected Iterator<String> getChoices(String input) {
        return getMyListElements().iterator();
    }
};
t.setOutputMarkupId(true);
t.add(b);
add(t);

Если вы используете Maven, просто добавьте следующую зависимость, чтобы начать использовать расширения wicket:

<dependency>
    <groupId>org.apache.wicket</groupId>
    <artifactId>wicket-extensions</artifactId>
    <version>${wicket.version}</version>
</dependency>

РЕДАКТИРОВАТЬ Видя, что вопрос касается нескольких текстовых полей с автозаполнением, как в в этом примере , вам может пригодиться следующая ссылка: Текстовые поля автозаполнения калитки .Там есть пара компонентов, которые, кажется, делают именно то, что вам нужно.

Вы также можете найти это обсуждение и это в списке пользователей Apache Wicketполезно.Там вы найдете пару ссылок на проекты, которые, кажется, также имеют этот компонент: interwicket и WicketHub

1 голос
/ 27 ноября 2011
0 голосов
/ 15 декабря 2011

Я мог бы решить проблему с помощью Ajax в калитке следующим образом

    TextArea partnersDB = new TextArea("partnersDB");
    String partnerKeeper;

    public String getPartnerKeeper() {
        return partnerKeeper;
    }
    public void setPartnerKeeper(String partnerKeeper) {
        this.partnerKeeper = partnerKeeper;
    }
    public String getMessageTypeKeeper() {
        return messageTypeKeeper;
    }
    public void setMessageTypeKeeper(String messageTypeKeeper) {
        this.messageTypeKeeper = messageTypeKeeper;
    }

    private void makePartnersAutoCompleter() {

        final List<String> allPartners = auditDAO.findAllPartnerIds();

        IAutoCompleteRenderer partnerRenderer = new AbstractAutoCompleteRenderer() {

            @Override
            protected String getTextValue(Object obj) {
                return getPartnerKeeper() + ((String) obj);
            }

            @Override
            protected void renderChoice(Object obj, Response r, String str) {
                r.write((String) obj);
            }

        };

        AutoCompleteBehavior autoCompleteBehavior = new AutoCompleteBehavior(partnerRenderer) {

            @Override
            protected Iterator<String> getChoices(String input) {
                int lastCommaIndex = input.lastIndexOf(';');
                String realInput = "";
                if (lastCommaIndex == -1) {
                    setPartnerKeeper("");
                    realInput = input;
                } else {
                    setPartnerKeeper(input.substring(0, lastCommaIndex) + ";");
                    realInput = input.substring(lastCommaIndex + 1);
                }

                List<String> completions = new ArrayList<String>();
                for (int i = 0; i < allPartners.size(); i++) {
                    String partner = allPartners.get(i);
                    if (partner.startsWith(realInput.toUpperCase()) || partner.startsWith(realInput.toLowerCase())) {
                        completions.add(partner + ";");
                    }
                }
                return completions.iterator();
            }

        };

                    partnersDB.add(autoCompleteBehavior);

    }
...