2013-03-27 3 views
1

Похоже, что модельный объект autocompletetextfield является строкой, даже если он должен быть сотрудником, что приводит к исключениям из-за невозможности отбрасывать из строки в сотрудника. Зачем? И как это можно исправить?Wicket AutoCompleteTextField model casting

 final DefaultCssAutocompleteTextField<Employee> field = new DefaultCssAutocompleteTextField<Employee>("field", new Model<Employee>(model.getObject().getMatch().getSupervisor())) { 
      @Override 
      protected Iterator<Employee> getChoices(String input) { 
       if (Strings.isEmpty(input)){ 
        List<Employee> emptyList = Collections.emptyList(); 
        return emptyList.iterator(); 
       } 
       return supervisorDao.getAutoCompleteCapableSupervisors(input, 6).iterator(); 
      } 
     }; 

     form.add(field); 

     field.add(new AjaxFormSubmitBehavior(form, "onchange") { 
      @Override 
      protected void onSubmit(AjaxRequestTarget target) { 

       //this generates an exception: cant cast from string to employee. why? and how can it be fixed? 
       Employee e = supervisorService.findOne(field.getModelObject().getId()); 

       //do some stuff with the employee and some components 

      } 

      @Override 
      protected void onError(AjaxRequestTarget target) { 
       //do nothing 
      } 
     }); 

ответ

3

Javadoc из AutoCompleteTextfield говорит:

Для преобразования ввода обратно в тип нестроковой вы должны предоставить обычай IConverter, либо перекрывая #getConverter(Class) или , установив соответствующий IConverter по заявке ConverterLocator.

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