Предварительно выберите опцию в форме и свойстве редактора

Я работаю с Spring в веб-приложении, использую формы и сейчас он работает нормально, но я хотел бы изменить одну вещь, и именно тогда я получаю сообщение об ошибке. У меня есть небольшая форма с двумя текстовыми полями и одним полем выбора, и именно это поле выбора вызывает ошибки. Опция выбора заполняется из базы данных.

Мой код: edit.jsp

<tr>
 <th><label for="parent"></label></th>
 <td><sf:select path="parent">
  <sf:option value="0" label="Parent" />
  <sf:options items="${parentsList}" itemLabel="name" itemValue="ID"  />
  </sf:select></td>
</tr>

controller.java

@RequestMapping(value = "/edit", method = RequestMethod.GET, params = {"id"})
public String edit(Model model, @RequestParam("id") int id) {
    try {
        if (logger.isInfoEnabled()) {
            logger.info("Edit category with id {}", id);
        }

        model.addAttribute("heading", "Edit Category");
        model.addAttribute("parentsList", listOfParents());
        model.addAttribute(categoryService.getCategory(id));

        if (logger.isInfoEnabled()) {
            logger.info("Finished");
        }
    } catch (DataAccessException ex) {
        logger.error(ex.getMessage(), ex);
    }
    return "category/edit";
}

private List<Category> listOfParents() {
    List<Category> listOfParents = new ArrayList<Category>();
    try {

        listOfParents.addAll(categoryService.listCategoryParents());

    } catch (DataAccessException ex) {
        logger.error(ex.getMessage(), ex);
    }
    return listOfParents;
}

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(Category.class, "parent", new CategoryEditor(CategoryService));
}

Мой редактор.java

public class CategoryEditor extends PropertyEditorSupport {
private CategoryService categoryService;
public CategoryEditor(CategoryService categoryService) {
    this.categoryService = categoryService;
}

@Override
public void setAsText(String text) throws IllegalArgumentException {
    if (text.equals("0")) {
        this.setValue(null);
    } else {
        category c = categoryService.getCategory(Integer.parseInt(text));
        this.setValue(sc);
    }
}
}

Когда я редактирую уже существующее сообщение, мне хотелось бы, чтобы родительский элемент был предварительно выбран в форме, и я просто не могу заставить его работать.

Есть кто-нибудь, кто может мне помочь? Большое спасибо за ваше время, и я надеюсь, что у меня есть смысл. Спасибо.

* РЕДАКТИРОВАТЬ *** Теперь я изменил свой редактор на форматтер, но не повезло:

@Component
public class CategoryFormatter implements Formatter<Category> {

    @Override
    public String print(Category parent, Locale locale) {
        System.out.println("Formatter Print with ID="+parent.getID());
        return Integer.toString(parent.getID());
    }

    @Override
    public Category parse(String id, Locale locale) throws ParseException {
        Category parent = new Category();
        parent.setID(Integer.parseInt(id));
        System.out.println("Formatter Parse with ID="+parent.getID());
        return parent;
    }
}

Но я все еще не получаю существующее значение в раскрывающемся списке при редактировании объекта. Мои распечатки при редактировании распечаток объектов:

Formatter Print with ID=1
Formatter Parse with ID=0
Formatter Print with ID=1
Formatter Print with ID=8

Что я делаю неправильно?!? (Я хотел бы добавить валидатор к этому позже, что является причиной перехода от редактора к форматеру)

0 ответов

Другие вопросы по тегам