2015-02-20 3 views
0

Я могу сгенерировать список строк, используемых для выбора элемента с помощью AutoCompleteTextField, но он помещает всю строку в элемент управления редактирования. Я бы хотел, чтобы он просто ввел строку «name».Как получить AutoCompleteTextField для принятия подстроки

Должен ли я создать модель, содержащую строку имени и визуализированную строку?

Какие функции следует переопределить для получения требуемой строки, чтобы получить значение или обработать клик?

private Model<String> groupToJoinModel = new Model<String>(); 
 

 
final AutoCompleteTextField<String> field = new AutoCompleteTextField<String>("ac", new Model<String>("")) 
 
{ 
 
\t private static final long serialVersionUID = 1L; 
 

 
\t @Override 
 
\t protected Iterator<String> getChoices(String input) 
 
\t { 
 
\t \t List<String> choices = new ArrayList<String>(5); 
 
\t \t // from a database: generate lookup items 
 
\t \t // by concatenating strings: name, type, description 
 
\t \t // code omitted 
 
\t \t return choices.iterator(); 
 
\t } 
 
}; 
 
form.add(field); 
 

 
groupToJoinModel = (Model<String>) field.getDefaultModel(); 
 

 
// Create a button to perform an action 
 
Button joinGroupsButton = new Button("joinGroupButton") 
 
{ 
 
\t private static final long serialVersionUID = -4974389888115885756L; 
 
\t 
 
\t @Override 
 
\t public void onSubmit() 
 
\t { 
 
\t \t if (groupToJoinModel.getObject() != null) 
 
\t \t { \t 
 
\t \t \t // An action is performed on the contents of the edit control 
 
\t \t } 
 
\t } 
 
}; 
 
form.add(joinGroupsButton); \t

ответ

0

Вы можете использовать AbstarctAutoCompleteRenderer.

AbstractAutoCompleteRenderer<String> autoCompleteRenderer = new AbstractAutoCompleteRenderer<String>() { 
        private static final long serialVersionUID = 1L; 

        protected final String getTextValue(final String bean) { 
         String name; 
         // Do you logic to extract the name from the bean 
         ... 
         ... 
         ... 

         return name; 
        } 

        @Override 
        protected final void renderChoice(final String object, final Response response, final String criteria) { 
         response.write(getTextValue(object)); 
        } 

       }; 


final AutoCompleteTextField<String> autoComp = new AutoCompleteTextField<String>("item", new PropertyModel(str, "item"), 
         autoCompleteRenderer) { 
        private static final long serialVersionUID = 1L; 

        @Override 
        protected Iterator<String> getChoices(String arg0) { 
         // Your logic 
         ... 
         ... 
         ... 

         return filteredList.iterator(); 
        } 

       }; 

Средство рендеринга передается в Auto complete constructor.

+0

Спасибо, я исследую это, если он снова появится. Проблема возникла, когда запятая была включена в поле имени. Я решил снова сравнить поле имени каждого элемента в повторенном списке возвращаемого значения. Это позволило мне получить правильное имя. – JoeAB

Смежные вопросы