フォームを使用して Web アプリケーションで Spring を使用していますが、現在は問題なく動作していますが、1 つのことを変更したいのですが、そのときにエラーが発生します。2 つのテキスト フィールドと 1 つの選択オプション フィールドを含む小さなフォームがありますが、この選択フィールドがエラーの原因です。選択オプションはデータベースから取り込まれます。
私のコード: 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>
コントローラー.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));
}
私の editor.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);
}
}
}
既存の投稿を編集するときに、親をフォームで事前に選択したいのですが、これはうまくいきません。
私を助けてくれる人はいますか?お時間をいただきありがとうございました。意味があることを願っています。ありがとうございました。
*EDIT*** エディターをフォーマッターに変更しましたが、うまくいきませんでした:
@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
私は何を間違っていますか?!? (後でこれにバリデーターを追加したいと思います。これが、エディターからフォーマッターに変更する理由です)